在我的控制器中,我这样做:
@categories = Category.all
for i in @categories.min.id..@categories.max.id
@allposts.push(Post.where(:Category => i))
end
在views(haml) i do
<% @allposts.each do |posts, slots| %>
<% @slots.each do |post| %>
<%= post.Title %>
<% end %>
<% end %>
我看到这个错误:
undefined method `each' for nil:NilClass on @slots.each do |post|.
提前感谢。
您没有在方法中定义@slots
。也许你指的是slots
。
<% @allposts.each do |posts, slots| %>
<% slots.each do |post| %>
<%= post.Title %>
<% end %>
<% end %>
修复方法:
<% @allposts.each do |posts, slots| %>
<% slots.each do |post| %> # <--- see I removed @ symbol
<%= post.Title %>
<% end %>
<% end %>
您的块变量是slots
,而您尝试使用@slots
。我想这是一个错别字。由于没有定义这样的@slots
变量,当您想使用它时,您得到了nil
。局部变量和实例变量之间有一个微妙的区别。如果您没有在任何地方定义局部变量(例如foo
),那么如果您想在其他地方使用foo
,则最终会得到未定义的局部变量或方法。但是对于实例变量,没有错误,您将默默地得到nil
。