Подтвердить что ты не робот

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.

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

4b9b3361

Ответ 1

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

has_one :image

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

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.