<%= render :partial => 'partial/path', :locals => {:xyz => 'abc'} %>
VS
<%= render :partial => 'partial/path', :object => @some_object %>
我认为第一个在partial中创建一个名为xyz的局部变量,第二个在partial中创建一个名为object的局部变量。那么区别是什么呢? (除了本地人允许多于变量)
答案 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 %>