1

Railsプロジェクトのpublic/ディレクトリ内に.htmlファイルを生成するgemを作成しています。これは、Cucumberシナリオからドキュメントを自動的に生成するために使用されます。

HTMLファイルをERBとしてテンプレート化できると非常に便利です。そうすれば、変数を渡し、ERBに処理を実行させてから、生のHTMLを吐き出してファイルを生成できます。

私は知ってActionController::Base#render_to_stringいますが、宝石の中で私は明らかにこの方法の範囲外です。これを行う別の方法はありますか?私の他のオプションは、ヒアドキュメントでマークアップを定義することですが、ERBファイルを書き込むことが可能であれば、それを避けたいと思います。

4

3 に答える 3

3

さまざまなヘルパーにアクセスする場合は、ERBの代わりにActionViewを使用することを検討してください。これを行う方法の完全に機能する例を次に示します。

class MyClass
  def test
    render 'register_user', :jid => 'my login', :password => 'my password'
  end

  private
  def render template, **values
    templates_dir = "#{Rails.root}/app/lib/api"
    template_file = "#{template}.xml.erb"
    ActionView::Base.new(templates_dir).render \
        :file => template_file,
        :locals => values
  end
end

テンプレートはにapp/lib/apiあり、次のようになります。

<query xmlns="archipel:xmppserver:users">
  <archipel action="register">
    <%= tag :user, :jid => jid, :password => password %>
  </archipel>
</query>
于 2013-12-06T18:05:54.913 に答える
1
require 'erb'
ERB.new("Hello <%= 'World'%>").result

テンプレートファイルを文字列に読み込み、新しいERBインスタンスでレンダリングしてから、静的HTMLを書き込むことができます。

変数を使用する必要がある場合は、バインディングを指定できます。

foo = :bar
ERB.new("Hello <%= foo%>").result(binding) # "Hello bar"

ERBドキュメント

ERB#result

于 2013-01-11T16:29:49.220 に答える
1
ActionView::Base.new(Rails.configuration.paths["app/views"].first).render(...)
于 2013-01-11T16:33:05.433 に答える