Rails 3,partials,可选参数 - 这是最好的方法吗?

时间:2011-10-21 16:38:56

标签: ruby-on-rails ruby-on-rails-3

从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

3 个答案:

答案 0 :(得分:1)

在主视图中,您只需使用普通的动作类变量(@whatever_variable_name),并在控制器中分配它们:

class FoosController
  def index
    @foos = Foo.all
  end
end

# template
<% @foos.each |foo| %>
    <%= foo.name %>

可能在局部中拥有无限制的本地人,但如果有“很多”,你可能会做错了。考虑使用封装对象,更多地分解模板等等。

Rails通过名称(infohide_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?方法是最好的方式。