違いがわからない
<%= render :partial => "book", :object => @book %>
と
<%= render :partial => "book", :collection => @books %>
と
<%= render :partial => "book", :locals => { :book => @book } %>
誰かが私にそれを説明できますか?
違いがわからない
<%= render :partial => "book", :object => @book %>
と
<%= render :partial => "book", :collection => @books %>
と
<%= render :partial => "book", :locals => { :book => @book } %>
誰かが私にそれを説明できますか?
これらは同じです:
<%= render :partial => "book", :object => @book %>
<%= render :partial => "book", :locals => { :book => @book } %>
<%= render "book", :book => @book %>
それらはファイルを一度レンダリングし、@book オブジェクトは変数_book.html.erb
としてそのパーシャルで利用可能になります。book
これは、同じことを簡単に短縮する方法です。
<%= render @book %>
これは少し異なります:
<%= render :partial => "book", :collection => @books %>
_book.html.erb
ファイルは の本ごとに 1 回レンダリングされ、それぞれが変数@books
としてそのパーシャルで順番に使用可能になります。book
これは、同じことを簡単に短縮する方法です。
<%= render @books %>
<%= render :partial => "book", :object => @book %>
最初のケースでは、:objectを使用すると、デフォルトでパーシャルと同じ名前の変数が定義されます。部分的なテンプレートの名前が_user.html.erbの場合、テンプレートには「user」という名前のローカル変数が定義されています。
:as=>"another_name"で別の変数名を指定できます。
<%= render :partial => "book", :locals => { :book => @book } %>
の最大の利点:locals
は
このアプローチの欠点は、:locals
より冗長で、場合によっては単純なことです。
render :partial => 'account'
と同じです
render :partial => 'account', :locals => {:account => @account }
したがって、自分に最も適したもの(または最も適した場所)を使用してください。
<%= render :partial => "book", :collection => @books %>
コレクションについては、http://blogs.visoftinc.com/2010/04/27/ruby-beauty-rendering-a-rails-partial-for-a-collection/を参照してください。
詳細:http://guides.rubyonrails.org/layouts_and_rendering.html#using-partials
<%= render :partial => "book", :object => @book %>
_book.html.erb
ローカル変数の部分設定を にレンダリングしbook
ます@book
。
<%= render :partial => "book", :collection => @books %>
のすべての要素に対して、ローカル変数の部分設定を の現在の要素に@books
レンダリングします。_book.html.erb
book
@books
<%= render :partial => "book", :locals => { :book => @book } %>
_book.html.erb
ローカル変数の部分設定book
を @book にレンダリングします。この形式では、追加のローカル変数を設定したり、それらの名前を変更したりできますが、:object バージョンではできません。