我很难理解
之间的区别<%= render :partial => "book", :object => @book %>
和
<%= render :partial => "book", :collection => @books %>
和
<%= render :partial => "book", :locals => { :book => @book } %>
有人可以向我解释一下吗?
答案 0 :(得分:3)
这些是相同的:
<%= render :partial => "book", :object => @book %>
<%= render :partial => "book", :locals => { :book => @book } %>
<%= render "book", :book => @book %>
他们将呈现_book.html.erb
文件一次,@ book对象将作为book
变量在该部分中可用。
这是一个简单的缩写相同的方法:
<%= render @book %>
这个有点不同:
<%= render :partial => "book", :collection => @books %>
它将在_book.html.erb
中为每本书呈现@books
个文件一次,每个文件在该部分中变为book
变量。
这是一个简单的缩写相同的方法:
<%= render @books %>
答案 1 :(得分:1)
<%= 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。此表单允许您设置其他局部变量或更改它们的名称,而:对象版本不会。
答案 2 :(得分:1)
<%= render :partial => "book", :object => @book %>
在第一种情况下使用:object将默认定义一个与partial相同的变量。如果我的部分模板名为_user.html.erb,则模板中将定义一个名为“user”的局部变量。
您可以使用以下命令指定其他变量名称:as =&gt; “another_name”。
<%= render :partial => "book", :locals => { :book => @book } %>
:locals
的最大优势在于
:locals
方法的缺点是它更冗长,有时候更简单
render :partial => 'account'
与
相同render :partial => 'account', :locals => {:account => @account }
因此,请使用最适合您的(或最适合您的地方)。
<%= render :partial => "book", :collection => @books %>
For Collection请参阅: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