渲染部分:对象vs:本地

Chr*_*nch 68 ruby-on-rails

<%= render :partial => 'partial/path', :locals => {:xyz => 'abc'} %>
Run Code Online (Sandbox Code Playgroud)

VS

<%= render :partial => 'partial/path', :object => @some_object %>
Run Code Online (Sandbox Code Playgroud)

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

nat*_*vda 53

第二种形式

render :partial => 'account', :object => @some_account
Run Code Online (Sandbox Code Playgroud)

将确保accountpartial中的变量将设置为@some_account.您可以使用该:as选项重命名变量.

最大的优点:locals

  • 你可以非常清楚地控制对象和名称
  • 您可以分配多个变量

所以你可以做点什么

render partial => 'some_view', :locals => { :user => account.user, :details => some_details_we_retrieved }
Run Code Online (Sandbox Code Playgroud)

在需要时可以明确分离.

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

render :partial => 'account'
Run Code Online (Sandbox Code Playgroud)

是完全相同的

render :partial => 'account', :locals => {:account => @account }
Run Code Online (Sandbox Code Playgroud)

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


Wiz*_*Ogz 34

在第二种情况下使用:对象将默认定义一个与partial相同的变量.如果我的部分模板名为_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

  • 文档移到这里:[http://api.rubyonrails.org/classes/ActionView/PartialRenderer.html](http://api.rubyonrails.org/classes/ActionView/PartialRenderer.html) (4认同)

Rya*_*yan 16

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

# Instead of <%= render partial: "account", locals: { account: @buyer } %>
<%= render 'account', account: @buyer %>
Run Code Online (Sandbox Code Playgroud)

来源:行动观看部分

  • 仅供参考,如果你试图从控制器渲染部分,这个简短形式**将无效**. (5认同)
  • 当我读到上面的评论时,我问自己,“那么控制器的工作原理是什么?” 冒着明显的风险,答案是包含`locals:` 键的版本。 (4认同)