Railsは - どのように外部サービスに送信する文字列として部分的HAMLのHTML出力を保存するには?
-
12-09-2019 - |
質問
やあみんな、ここでの最初の投稿は、あなたが私を助けることができると思います。
私たちは、rakeタスクを使用して24時間ごとに自動的にニュースレターを作成しています。管理者がカスタマイズされたメッセージを入れることができますニュースレターの上部のセクションがあります。画面には、管理者が使用する(彼らはこの上のしつこいた)ニュースレターのライブプレビューを持っていること、コレクションをとるHAML部分を使用してレンダリングます。
電子メールを生成して送信するために、我々は(他のものの間で)我々が生成したい電子メールのHTMLが含まれているサードパーティのAPIにXML文書を送信されます。
私は何をしたい、PHPのOB _ *()バッファリング機能に似た何かをrakeタスク内の部分、このHAMLの出力を保存しています。以下のような何かをする方法はあります:
ob_start();
render :partial => newsletter, :collection => posts
newsletter_html = ob_get_contents()
xml = "
<Creative>
<Name>Our Newsletter -- #{Time.now.strftime('%m/%d/%Y')}</Name>
<HTML><html><body>#{newsletter_html}</body></html></HTML>
...
</Creative>"
私はおそらく何かを明らかに不足している、と私はこれを行うには、いくつかの方法を考えることができますが、それらのほとんどはDRYではないと私はヘルパーでHTMLの多くを生成することにしたくない、モデル、またはタスクそのものます。
私はこれを達成するための方法があるなら、私に教えてください。おかげます。
解決
(通常に対して助言されている)、これを行うための一般的な方法は、お使いのモデルや熊手タスク内の文字列にレンダリングすることです
cached_content =
ActionView::Base.new(Rails::Configuration.new.view_path).render(:partial => "newsletter", :locals => {:page => self,:collection => posts})
より詳しい説明についてはこちらを参照してください。 のhttp:// WWW .compulsivoco.com / 2008/10 /レンダリング・レール・パーシャル・イン・モデル・オア・バックグラウンド・タスク/ の
を使用すると、ページまたはフラグメント・キャッシュを使用している場合は、キャッシュからコンテンツをプルできます。これを行うための最も簡単な方法は、単にキャッシュを有効にして、ファイルが置かれている場所を見ることである。
他のヒント
HAMLドキュメントのからより直接的なアプローチ:
require 'haml'
haml_string = "%p Haml-tastic!"
engine = Haml::Engine.new(haml_string)
engine.render #=> "<p>Haml-tastic!</p>\n"
あなたは補間を必要とする任意のローカル変数をHAMLテンプレートをロードし、設定作業のビットを行う必要があるでしょうが、柔軟性が、そのために作ることがあります。
ビットが、あなたはそれを超える可能性が高い文字列といくつかの変数を受け入れ、その後、出力をレンダリングする方法がありますHAMLためのRDOCをチェックアウトする場合。
ERBで、それは次のようになります
require 'erb'
name = 'world'
template = 'hello <%= name %>'
template = ERB.new(template)
puts template.result(binding)