2013-09-10 4 views
0

Это мой index_controllerhas_many и belongs_to NameError рельсам

def index 
    @category = Category.all 
    end 

Моя категория модель содержит

has_many :sub_categories

и моя sub_category модель содержит

belongs_to :category

И здесь мой взгляд

<% category.sub_categories.each do |f| %> 
    <li>f.name</li> 
<% end %> 

Я использую рельсы 4 и я получаю сообщение об ошибке, как

undefined local variable or method `category' for #<#<Class:0xab758cc>:0xb56c46d8> 

ответ

3

Вы просто немного согласны с вашими соглашениями об именах и какой код он предлагает вам написать:

def index 
    @categories = Category.all 
end 

@category должен быть @categories, потому что Category.all возвратит ActiveRecord отношение 0, 1 или многих объектов категории, а не одного объекта.

Тогда:

<% @categories.each do |category| %> 
    <% category.sub_categories.each do |sub_category| %> 
    <li><%= sub_category.name %></li> 
    <% end %> 
<% end > 

Сначала вы итерацию по категориям от Category.all, то для каждой категории, вы перебирать ее подкатегорий.

0

Вы пропустили ссылку на переменную экземпляра и ERB тег использовать f.name, он должен быть

<% @category.sub_categories.each do |f| %> 
    <li><%= f.name %></li> 
<% end %> 
+0

Я тоже, но не пытался это один рабочий – overflow

+0

получил ту же ошибку? – Miguelgraz

+0

Нет, это «NoMethodError» – overflow

1

У вас есть две проблемы.

  • Это должно быть @category, не category
  • Это должно быть <li><%= f.name %></li>
Смежные вопросы