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.html.erb文件一次,@book 对象将在该部分中作为book变量可用。

这是缩写相同事物的一种好方法:

<%= render @book %>

这个有点不同:

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

它将在_book.html.erb每本书中呈现一次文件@books,而每个文件又在该部分中作为book变量可用。

这是缩写相同事物的一种好方法:

<%= render @books %>
于 2012-11-17T01:46:14.640 回答
1
<%= render :partial => "book", :object => @book %>

_book.html.erb局部变量设置book@book.

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

对于 in 中的每个元素,@books都会将_book.html.erb局部变量设置为bookin 中的当前元素@books

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

_book.html.erb局部变量设置book为@book。这种形式允许您设置额外的局部变量或更改它们的名称,而 :object 版本则不能。

于 2012-11-17T01:35:21.330 回答
1
<%= render :partial => "book", :object => @book %>

在第一种情况下,使用 :object 将默认定义一个与 partial 同名的变量。如果我的部分模板名为 _user.html.erb,那么模板中将定义一个名为“user”的局部变量。

您可以使用 :as => "another_name" 指定不同的变量名。

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

最大的优点:locals

  1. 您可以非常清楚地控制对象和名称
  2. 您可以分配超过 1 个变量

:locals方法的缺点是它比较冗长,有时很简单

render :partial => 'account'

等同于

render :partial => 'account', :locals => {:account => @account }

So use the one which suits you the best (or where it suits the best).

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

For Collection See : http://blogs.visoftinc.com/2010/04/27/ruby-beauty-rendering-a-rails-partial-for-a-collection/

More info: http://guides.rubyonrails.org/layouts_and_rendering.html#using-partials

于 2012-11-17T05:05:10.383 回答