2012-11-17 82 views
1

我有麻烦了解什么是使用对象,收集和当地人在部分

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

之间的差之差
<%= render :partial => "book", :collection => @books %> 

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

有人能解释一下对我来说 ?

+0

值得一提的是,你已经错过了做这个最简单的方法:'<%=渲染@book%>'。 – meagar

回答

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 %> 

它将@books每本书一旦呈现_book.html.erb文件,每在book变量中变为可用。

这里是一个甜方式缩写同一件事:

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

将呈现局部_book.html.erbbook设置局部变量@book

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

对于@books每个元素将呈现局部_book.html.erb@books在局部变量book设置为当前元素。

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

将呈现局部_book.html.erb设置局部变量book到@book。这种形式可以让你设置额外的局部变量或者改变它们的名字,而对象版本不会。

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

在使用第一种情况:对象将定义具有相同名称作为部分缺省的变量。如果我的部分模板名为_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 } 

所以使用哪个适合你的最好的一个(或者它适合最好的)。

<%= 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