1

違いがわからない

<%= render :partial => "book", :object => @book %>

<%= render :partial => "book", :collection => @books %>

<%= render :partial => "book", :locals => { :book => @book } %>

誰かが私にそれを説明できますか?

4

3 に答える 3

3

これらは同じです:

<%= 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 %>
于 2012-11-17T01:46:14.640 に答える
1
<%= render :partial => "book", :object => @book %>

最初のケースでは、:objectを使用すると、デフォルトでパーシャルと同じ名前の変数が定義されます。部分的なテンプレートの名前が_user.html.erbの場合、テンプレートには「user」という名前のローカル変数が定義されています。

:as=>"another_name"で別の変数名を指定できます。

<%= render :partial => "book", :locals => { :book => @book } %>

の最大の利点:locals

  1. オブジェクトと名前を非常に明確に制御できます
  2. 複数の変数を割り当てることができます

このアプローチの欠点は、: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

于 2012-11-17T05:05:10.383 に答える
1
<%= render :partial => "book", :object => @book %>

_book.html.erbローカル変数の部分設定を にレンダリングしbookます@book

<%= render :partial => "book", :collection => @books %>

のすべての要素に対して、ローカル変数の部分設定を の現在の要素に@booksレンダリングします。_book.html.erbbook@books

<%= render :partial => "book", :locals => { :book => @book } %>

_book.html.erbローカル変数の部分設定bookを @book にレンダリングします。この形式では、追加のローカル変数を設定したり、それらの名前を変更したりできますが、:object バージョンではできません。

于 2012-11-17T01:35:21.330 に答える