2011-02-25 66 views
54
<%= render :partial => 'partial/path', :locals => {:xyz => 'abc'} %> 

VS渲染部分:对象VS:当地人

<%= render :partial => 'partial/path', :object => @some_object %> 

我第一个想到的使部分和第二个使在部分可用一个局部对象变量命名可用一个局部变量名为XYZ的。那么区别是什么呢? (除了当地人允许多于变量)

回答

30

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

您可以指定一个不同的变量名称:as =>“another_name”。

这是记录在这里: http://api.rubyonrails.org/classes/ActionView/PartialRenderer.html,在这里:http://apidock.com/rails/ActionView/PartialRenderer

...和老年人的Rails(版本< = V3.09): http://apidock.com/rails/ActionView/Partials

+3

文档搬到这里: [http://api.rubyonrails.org/类/ ActionView/PartialRenderer.html](http://api.rubyonrails.org/classes/ActionView/PartialRenderer.html) – kimos 2013-03-13 17:37:15

48

第二种形式

render :partial => 'account', :object => @some_account 

将确保部分中的account变量将被设置为@some_account。 您可以使用:as选项重命名变量。

:locals的最大优点是,

  • 你有过的对象和名字非常明确控制
  • 您可以指定1个多变量

所以,你可以这样做

render partial => 'some_view', :locals => { :user => account.user, :details => some_details_we_retrieved } 

作出明确的分离位置需要时可以使用。

:locals方法的缺点是,它是更冗长,有时一个简单的

render :partial => 'account' 

是相同的

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

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

+0

我有一个例子,我可以通过对象在我的部分访问:对象变量的名称..这很奇怪。 – 2011-02-25 21:20:51

+0

如果'@ account'为零,':object => @ account'将不会使部分帐户可用;你会得到一个错误,试图做这样的事情:'如果帐户<做某事>'。如果您不确定是否已定义@account,请使用':locals => {:account => @ account}' – 2015-03-05 19:50:28

13

如果你使用Rails 3+,有一种更简单的使用语法:

# Instead of <%= render partial: "account", locals: { account: @buyer } %> 
<%= render 'account', account: @buyer %> 

来源:Action View Partials

+3

如果您要从控制器呈现部分内容,则此简写形式**将会不行**。 – 2014-12-08 19:25:09