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'essaye de faire ça:
ad = FactoryGirl.create (: ad) J'obtiens l'erreur suivante ActiveModel::MissingAttributeError: can't write unknown attribute ad_id'
en plein dans la ligne où je décide de l'association d'images dans ad Factory.
Qu'est-ce que je fais mal ici?
Quand tu dis:
has_one :image
Rails s'attend à ce que vous définissiez un ad_id
champ dans la table images
. Compte tenu de l'organisation de vos associations, je suppose que vous disposez d'un image_id
et un logo_id
dans la table ads
donc au lieu de:
class Ad < ActiveRecord::Base
belongs_to :page
has_one :image
has_one :logo
end
Vous voulez probablement dire:
class Ad < ActiveRecord::Base
belongs_to :page
belongs_to :image
belongs_to :logo
end
Si ce n'est pas le cas, vous devez ajouter ad_id
colonnes vers Image
et Logo
.
J'ai rencontré cette même erreur et il a fallu un certain temps pour trouver un correctif. Juste au cas où cela aiderait quelqu'un d'autre à l'avenir, voici mon scénario et ce qui a fonctionné pour moi. Les noms de classe ont été modifiés car c'est pour le travail:
J'avais 2 modèles avec espace de noms:
Pantry::Jar
has_many :snacks, class_name: Pantry::Snack
accepts_nested_attributes_for :snacks
Pantry::Snack
belongs_to :pantry_jar, class_name: Pantry::Jar
Quand je créais un nouveau pot avec de nouvelles collations, j'obtenais:
ActiveModel::MissingAttributeError: can't write unknown attribute `jar_id'
Le correctif consistait à modifier le has_many
pour être plus explicite sur la clé étrangère:
has_many :snacks, class_name: Pantry::Snack, foreign_key: :pantry_jar_id