Несколько представлений в Rails - PullRequest
1 голос
/ 17 ноября 2009

У меня следующая проблема:

В 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 Ответ

1 голос
/ 17 ноября 2009

Вы забыли установить переменную @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 и / или в его часть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...