2012-05-15 2 views
0

Моя проблема заключается в том, что я пытаюсь вызвать связь с таблицей. Я получаю идентификационный номер, но хочу получить от него другое поле. когда будет эта проблема до МоделиНеинициализированная константа Поставщик :: Категории

class Category < ActiveRecord::Base 
has_many :suppliers 

конца класса Поставщика < ActiveRecord :: Base belongs_to: Категории конца

class Supplier < ActiveRecord::Base 
    belongs_to :categories 
end 

Контроллер

def index 
@suppliers = Supplier.all 
end 
View : 
<% @suppliers.each do |s|%> 
       <td><%= s.name %></td> 
       <td><%= s.inspect %></td> 
       <% s.categories.each do |c|%> 
        <td><%= c.inspect %></td> 
        <%end%> 
       <% end %> 


errormesseage : uninitialized constant Supplier::Categories 
+0

Где внешний ключ на вашей модели? Имеет ли '' '' '' 'category_id', или' '' имеет 'поставщик_ид'? – Gareth

+0

Это category_id. Я хочу, чтобы «поставщик» относится к категории «хлеб-провайдер», но может быть только из категорий_id @Gareth – Max

+0

. Вы определяете отношения «один», когда у поставщика есть одна категория, но ваш контроллер предлагает, чтобы вы либо хотели это наоборот, или вы хотите 'has_and_belongs_to_many', чтобы у поставщиков было много категорий и наоборот. – Matt

ответ

0

Ваша модель поставщик должен иметь category_id поле (в единственном числе), неcategories_id поле (множественное число).

После того, как вы сделали это, изменить модель для

class Supplier < ActiveRecord::Base 
    belongs_to :categories 
end 

и все начнет работать.

Если английский не является вашим первым языком, это может быть неочевидным, но Rails пытается придерживаться английских языковых соглашений. Итак, поскольку поставщик относится только к одной категории, вы используете единственную форму, когда говорите об отношениях.

Это та же логика, что означает, что ваш класс [один] Supplier но таблица базы данных содержит suppliers

+0

Вы также будете в моем файле миграции в от t.references: categories to t.references: category? – Max

+0

Да. Потому что каждый поставщик ссылается на одну категорию – Gareth

+0

, если я меняю: неопределенный метод 'категории 'для # <Поставщик: 0x37ee5c8> – Max

1

Если category_id столбец вашей таблицы поставщиков, тогда вы должны объявить принадлежность как указано ниже.

class Supplier < ActiveRecord::Base 
    #not 
    #belongs_to :categories 
    belongs_to :category 
end 
+0

Nej, om jag skriver kontrollera enligt min mening. # <Идентификатор поставщика: 1, имя: "Ica Maxi", город: "Стокгольм", Контактный телефон: "Kalle svensson", Номер телефона: "4564564", categories_id: 1, created_at: "2012-05-13 11:31 : 42 ", updated_at:" 2012-05-13 11:31:42 "> – Max

+0

посетите http://stackoverflow.com/questions/3798253/getting-uninitialized-constant-error-when-using-delegate-in-belongs -to-in-mode –

+0

Посетите http://en.wikibooks.org/wiki/Ruby_on_Rails/ActiveRecord/Associations#belongs_to –

Смежные вопросы