从php迁移应用。并在视图中有这个:
<%=render :partial => "jt-test", :locals => {:info => "here is my info", :hide_location=>true} %>
<br /><br />
<%=render :partial => "jt-test", :locals => {:info => "here is my info"} %>
在_jt-test.html.erb中:
My info:<br />
<%=info %>
<% if local_assigns.has_key? :hide_location %>
you want to hide location!
<% end %>
local_assign是正确/最好的方法吗?我可以拥有无限数量的local_assigns吗?是否有从控制器调用的主视图的local_assigns?
THX
答案 0 :(得分:1)
在主视图中,您只需使用普通的动作类变量(@whatever_variable_name
),并在控制器中分配它们:
class FoosController
def index
@foos = Foo.all
end
end
# template
<% @foos.each |foo| %>
<%= foo.name %>
你可能在局部中拥有无限制的本地人,但如果有“很多”,你可能会做错了。考虑使用封装对象,更多地分解模板等等。
Rails通过名称(info
和hide_location
在您的情况下)将局部变量公开给部分。您无需使用has_key?
进行查找。请参阅布局和渲染指南中的passing local variables docs。
答案 1 :(得分:1)
Rails 3改进了渲染局部图像的方式。
<%= render "jt-test", :info => "here is my info", :hide_location => true %>
<br /><br />
<%= render "jt-test", :info => "here is my info", :hide_location => false %>
_jt-test.html.erb
中的:
My info:<br />
<%= info %>
<% unless hide_location %>
you want to hide location!
<% end %>
local_assign是否有正确/最好的方法来执行此操作?
以上是使用Rails 3渲染部分的首选方法
我可以拥有无限数量的local_assigns吗?
你受到记忆的限制。
是否有从控制器调用的主视图的local_assigns?
不确定,但为什么要这样做呢?保持视图逻辑不受控制器的影响。
答案 2 :(得分:0)
就像Dave说的那样,如果你有很多可选变量,你可能最好封装一个对象并将它传递给partial,但是在检查可选的本地赋值的情况下,has_key?
方法是最好的方式。