渲染部分:对象vs:本地

时间:2011-02-25 20:24:03

标签: ruby-on-rails

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

VS

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

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

3 个答案:

答案 0 :(得分:49)

第二种形式

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 }

因此,请使用最适合您的(或最适合您的地方)。

答案 1 :(得分:31)

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

您可以使用以下命令指定其他变量名称:as =&gt; “another_name”。

这里有记录: http://api.rubyonrails.org/classes/ActionView/PartialRenderer.html,此处:http://apidock.com/rails/ActionView/PartialRenderer

...对于较旧的Rails(版本&lt; = v3.09): http://apidock.com/rails/ActionView/Partials

答案 2 :(得分:16)

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

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

来源:Action View Partials