render partial :object vs :locals

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

vs

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

I think the first one make a local variable named xyz available in the partial and the second one makes a local variable named object available in the partial. So what is the difference? (Besides locals allows more than one variable)

92723 次浏览

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

可以使用: as = > “ another _ name”指定不同的变量名。

This is documented here: Http://api.rubyonrails.org/classes/actionview/partialrenderer.html http://apidock.com/rails/actionview/partialrenderer :

... 以及更老的 Rails (版本 < = v3.09) : Http://apidock.com/rails/actionview/partials

第二种形式

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

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

:locals的最大优点是

  • 你可以很清楚地控制物品和名字
  • 可以分配多个变量

这样你就可以

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

资料来源: Action View Partials