ActiveModel:: MissingAttributeError: ne peut pas écrire l'attribut inconnu 'ad id' avec FactoryGirl

j'ai les modèles suivants:

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

et j'ai défini les usines suivantes:

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

Quand j'essaie de faire ceci:

ad = FactoryGirl.créer (ad) j'obtiens l'erreur suivante ActiveModel::MissingAttributeError: can't write unknown attribute ad_id' dans la ligne où je décide de l'association d'image dans l'usine de publicité.

Ce que je fais mal?

23
demandé sur Hommer Smith 2013-11-30 06:08:35

1 réponses

Quand tu dis:

has_one :image

Rail s'attend à ce que vous définissiez un ad_id champ images tableau. Compte tenu de la façon dont vos associations sont organisées, je suppose que vous avez un image_id et logo_idads table de sorte qu'au lieu de:

class Ad < ActiveRecord::Base
  belongs_to :page

  has_one :image
  has_one :logo
end

Tu veux sans doute dire:

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

Si ce n'est pas le cas, alors vous devez ajouter ad_id colonnes aux deuxImage et Logo.

38
répondu Maurício Linhares 2013-11-30 02:43:47