我有以下问题:
在Rails中我有两个对象:类别和项目 一个类别有很多项目,一个项目属于一个类别。
好。没有问题。 但是现在,我希望在项目的每个页面上的侧边栏中显示所有现有类别。
我尝试将它们显示为:
<div class="sidebar">
<% @categories.each do |category| %>
<p><%= link_to category.title, category %></p>
<% end %>
</div>
我的根控制器是类别。在我的起始页面上,上面的代码可以正常运行。
但是当我点击一个类别时,我得到以下异常:
*You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.each*
Extracted source (around line #2):
2: <% @categories.each do |category| %>
如何解决此问题?
抱歉我的英语不好!
答案 0 :(得分:1)
您忘记在控制器中设置@categories变量。 您可以在显示侧边栏所需的每个操作中加载@categories,也可以在不设置实例变量的情况下将请求委托给视图。
# in the controller
def action
@categories = ...
end
# or in the view
<div class="sidebar">
<% Category.all.each do |category| %>
<p><%= link_to category.title, category %></p>
<% end %>
</div>
如果代码跨越多个视图/控制器,我建议您在before_filter
和/或部分中提取语句。