<%= render :partial => 'partial/path', :locals => {:xyz => 'abc'} %>
与
<%= render :partial => 'partial/path', :object => @some_object %>
我认为第一个使局部变量xyz
中的局部变量可用,第二个使局部变量object
中的局部变量可用。那么区别是什么呢?(此外locals
允许多个变量)
Answers:
在第二种情况下,默认情况下,使用:object将定义与部分变量同名的变量。如果我的部分模板名为_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
第二种形式
render :partial => 'account', :object => @some_account
将确保account
Partial中的变量将设置为@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 }
因此,请使用最适合您的一种(或最适合您的一种)。
@account
为nil,:object=>@account
则不会在部分帐户中可用;尝试执行以下操作时会出现错误:if account <do something>
。如果不确定是否已定义@account,请使用 :locals => { :account=>@account }