@categories
определены только в действии индекса. Я предполагаю, что вы используете _menu.html.erb
как частичное в макете - на каждой странице.
@categories
будет нулевым для остальных, что вызовет исключение.
Существует два основных способа определения категорий для всех действий.
Можно было бы сделать вызов в частичном, как
<% Category.all.each do |category| %>
Другой способ использования фильтра before в вашем контроллере
class CategoriesController
before_filter :load_categories
...
private
def load_categories
@categories = Category.all
end
end
Лично я предпочитаю второй способ, потому что мне не нравятся вызовы базы данных, запускаемые в представлениях.