这段代码工作正常:
<%= render 'sidebars/pages',:object => @categories = pages,:object => { @myobject => '1',@mmyobject => '2' } %>
如果我改为:
<%= render 'sidebars/pages',:object => { @categories => pages,@myobject => '1',@mmyobject => '2' } %>
然后,当我尝试迭代@categories时,我从部分收到错误:
undefined method `each' for nil:NilClass
我对ruby和rails也很新,我很感激任何帮助.
干杯!
解决方法
将一个:对象传递给一个Rails局部时,局部变量(不是一个以@开头的实例变量)在partial中定义,该局部变量与partial相同.因此,对于部分sidebars / _pages.html.erb,您的局部变量将被称为页面.
pages局部变量的值是您作为:object选项的值传递的Hash,并且您在“外部”视图中没有的实例变量都可用(例如@categories或@myobject).所以你需要通过页面局部变量访问它们.
你可能正在寻找这样的东西:
<%= render 'sidebars/pages',:object => { :categories => @categories,:myobject => '1',:mmyobject => '2' } %>
在sidebars / _pages.html.erb中,您可能会遇到以下情况:
<p><%= pages[:myobject] %></p> <ul> <% pages[:categories].each do |category| %> <li><%= category %></li> <% end %> </ul>
有关详细信息,请参阅Rails指南布局和渲染Partials section.
更新:
一个更好的解决方案是使用:locals选项,它接受一个Hash,其键成为局部变量.例如:
<%= render 'sidebars/pages',:locals => { :categories => @categories,您可能会遇到以下情况:<p><%= myobject %></p> <p><%= mmyobject %></p> <ul> <% categories.each do |category| %> <li><%= category %></li> <% end %> </ul>