渲染部分:对象vs:本地人

<%= render :partial => 'partial/path', :locals => {:xyz => 'abc'} %> 

VS

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

我认为第一个在部分中创build一个名为xyz的局部variables,第二个在局部中创build一个名为object的局部variables。 那么区别是什么呢? (除了本地人允许更多的variables)

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

您可以使用以下命令指定不同的variables名称:as =>“another_name”。

这里logging: http :

…和较老的Rails(版本<= v3.09): http ://apidock.com/rails/ActionView/Partials

第二种forms

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

将确保部分中的accountvariables将被设置为@some_account 。 您可以使用:as选项来重命名该variables。

最大的优点是:locals是这样的

  • 你对对象和名字有非常清晰的控制
  • 你可以分配多个variables

所以你可以做类似的事情

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

在需要时做出明确的分离。

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

 render :partial => 'account' 

是相同的

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

所以使用最适合你的那个(或者最适合的地方)。

如果您使用Rails 3+,则可以使用更简单的语法:

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

来源: 操作视图部分