在rails视图中打印多维数组

时间:2014-05-05 16:33:09

标签: ruby-on-rails ruby arrays multidimensional-array views

在我的控制器中,我做了:

@categories = Category.all
for i in @categories.min.id..@categories.max.id
   @allposts.push(Post.where(:Category => i))
end

在视图(haml)中我做

<% @allposts.each do |posts, slots| %>
  <% @slots.each do |post| %>
    <%= post.Title %>
  <% end %>
<% end %>

我看到了这个错误:

undefined method `each' for nil:NilClass on @slots.each do |post|.

提前谢谢。

2 个答案:

答案 0 :(得分:3)

您尚未在方法中定义@slots。也许您的意思是slots

<% @allposts.each do |posts, slots| %>
  <% slots.each do |post| %>
    <%= post.Title %>
  <% end %>
<% end %>

答案 1 :(得分:2)

修复是:

<% @allposts.each do |posts, slots| %>
  <% slots.each do |post| %>  # <--- see I removed @ symbol
    <%= post.Title %>
  <% end %>
<% end %>

您的块变量为slots,您尝试@slots。我认为这是一个错字。由于没有定义此类@slots变量,因此当您想要使用它时,您获得了nil。局部变量和实例变量之间存在微妙差异。如果您没有在本地变量的任何地方定义foo,那么如果您想在其他地方使用foo,则最终会使用未定义的局部变量或方法。但对于实例变量,没有错误,您将默默获取nil