2013-11-30 5 views
20

У меня есть следующие модели:ActiveModel :: MissingAttributeError: не может написать неизвестный атрибут `ad_id» с FactoryGirl

class Ad < ActiveRecord::Base 
    belongs_to :page 

    has_one :image 
    has_one :logo 
end 

class Page < ActiveRecord::Base 
    has_many :logos 
    has_many :images 
    has_many :ads 
end 

class Image < ActiveRecord::Base 
    belongs_to :page 
    has_many :ads 
end 

И я определил следующие предприятия:

factory :page do 
    url 'test.com' 
end 

factory :image do 
    width 200 
    height 200 
    page 
end 

factory :ad do 
    background 'rgb(255,0,0)' 
    page 
    image 
end 

Когда я пытаюсь для этого:

ad = FactoryGirl.create (: ad) Я получаю следующую ошибку ActiveModel::MissingAttributeError: can't write unknown attribute ad_id' прямо в строке, где я определяю ассоциацию изображений в объявлении Factory.

Что я здесь делаю неправильно?

+0

Учитывая, что проблема ** на фабрике ** и вы не показываете заводской код, вы думаете, что этого достаточно? –

+0

Маурисио, у него не хватало атрибутов фабрик, но я показывал ассоциации. В любом случае, я добавил их. –

ответ

31

Когда вы говорите:

has_one :image 

Rails ожидает, что вы определить ad_id поле в images таблице. Учитывая то, как организованы ваши ассоциации, я полагаю, у вас есть image_id и logo_idads стол так вместо:

class Ad < ActiveRecord::Base 
    belongs_to :page 

    has_one :image 
    has_one :logo 
end 

Вы, наверное, имели в виду:

class Ad < ActiveRecord::Base 
    belongs_to :page 
    belongs_to :image 
    belongs_to :logo 
end 

Если это не так, то вы необходимо добавить ad_id столбцов к Image и Logo.

+0

О, это интересно. Я поставил 'has_one', потому что было более естественным сказать, что Ad HAS ONE Image. –

+5

'has_one' и' has_many' подразумевает, что внешний ключ находится на другом конце ассоциации 'принадлежит_то', что он находится на текущем объекте. –

+0

@ MaurícioLinhares - это внешний ключ, необходимый в случае 'through' ассоциаций с' own_to' или 'has_one' /' has_many'? – FloatingRock

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