私は次のモデルを持っています:
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'
広告ファクトリーで画像の関連付けを決定する行の右。
ここで何が間違っていますか?
あなたが言う時:
has_one :image
Railsは、images
テーブルでad_id
フィールドを定義することを期待しています。アソシエーションの編成方法を考えると、次の代わりに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
の両方に追加する必要があります。
私はこの同じエラーに遭遇し、修正を見つけるのに時間がかかりました。将来これが他の誰かを助ける場合に備えて、ここに私のシナリオと私のために働いたものがあります。これは作業用であるため、クラス名が変更されました。
2つの名前空間モデルがありました。
Pantry::Jar
has_many :snacks, class_name: Pantry::Snack
accepts_nested_attributes_for :snacks
Pantry::Snack
belongs_to :pantry_jar, class_name: Pantry::Jar
新しいスナックで新しい瓶を作成すると、次のようになります:
ActiveModel::MissingAttributeError: can't write unknown attribute `jar_id'
修正は、has_many
を変更して、外部キーについてより明示的にすることでした。
has_many :snacks, class_name: Pantry::Snack, foreign_key: :pantry_jar_id