ActiveModel::MissingAttributeError: can't write unknown attribute `ad_id' with FactoryGirl

factory-bot, ruby-on-rails

Solution

When you say:

has_one :image

Rails expects you to define an `ad_id` field at the `images` table. Given the way your associations are organised, I assume you have an `image_id` and a `logo_id` a the `ads` table so instead of:

class Ad < ActiveRecord::Base
  belongs_to :page

  has_one :image
  has_one :logo
end

You probably mean:

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

If that's not the case then you need to add `ad_id` columns to both `Image` and `Logo`.

Problem

I have the following models: ``` 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 ``` And I have defined the following Factories: ``` 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 ``` When I try to do this: ad = FactoryGirl.create(:ad) I get the following error `ActiveModel::MissingAttributeError: can't write unknown attribute ad_id'` right in the line where I decide the image association in the ad Factory. What am I doing wrong here?

Original source