Rails中的多个视图

时间:2009-11-17 08:15:58

标签: ruby-on-rails ruby

我有以下问题:

在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| %>

如何解决此问题?

抱歉我的英语不好!

1 个答案:

答案 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和/或部分中提取语句。