controllerでERBテンプレートを扱うのは簡単ですよね。
しかしmodelやクラスなどでどうERBテンプレートを使用するのか気になったのでまとめてみました。
パターン1
ERB.newを使うぜよ
1 |
<%= price %>円 |
1 2 3 4 5 |
> price = 100 100 > ERB.new(File.read('app/views/test.html.erb')).result(binding) "100円" |
このパターンはヒアドキュメントのHTMLが使用できちまうんだ。
1 |
ERB.new(ここにHTMLのヒアドキュメント).result(binding) |
パターン2
ActionView::Base.newを使うぜよ
1 |
<%= price %>円 |
1 2 |
> ActionView::Base.new(Rails.root.join('app', 'views')).render(template: 'test', format: 'html', locals: { price: 100 }) "100円" |
このパターンは何が良いかというと
なんと普通のcontrollerで使用していたrenderが使えるのです。
何を言っているのかわからない人向けの例
1 |
<%= render template: 'render_test', locals: { price: price } %> |
1 |
<%= price %>円 |
1 2 |
> ActionView::Base.new(Rails.root.join('app', 'views')).render(template: 'test', format: 'html', locals: { price: 100 }) "100円" |
てな感じね。
まとめ
結果的にはどちらも同じテンプレートを使用しているので同じ文字列になって帰ってきた。
まぁ汎用性を考えると圧倒的にパターン2の方が良い気がする。
部分テンプレートも使用できるので理由がなければパターン2でしょうね。
わからんけど。
参考
rails runnerやmodelからapp/views/に有るテンプレートを使ってhtmlを生成したい
Rubyのヒアドキュメントの代わりにERBを使う
スポンサードリンク