在我的控制器中,我做了:
@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|.
提前谢谢。
答案 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
。