ActiveModel::MissingAttributeError: can't write unknown attribute `ad_id' with FactoryGirl ActiveModel::MissingAttributeError: can't write unknown attribute `ad_id' with FactoryGirl ruby-on-rails ruby-on-rails

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


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 :logoend

You probably mean:

class Ad < ActiveRecord::Base  belongs_to :page  belongs_to :image  belongs_to :logoend

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


I ran into this same error and it took a while to figure out a fix. Just in case this helps someone else in the future, here's my scenario and what worked for me. Class names have been changed as this is for work:

I had 2 namespaced models:

Pantry::Jarhas_many :snacks, class_name: Pantry::Snackaccepts_nested_attributes_for :snacksPantry::Snackbelongs_to :pantry_jar, class_name: Pantry::Jar

When I would create a new jar with new snacks, I would get:

ActiveModel::MissingAttributeError: can't write unknown attribute `jar_id'

The fix was to change the has_many to be more explicit about the foreign key:

has_many :snacks, class_name: Pantry::Snack, foreign_key: :pantry_jar_id


If you are getting this error while running the specs, it may be the newly added field that are not migrated in the test environment. So migrate it in the test environment with the below command

rake db:migrate db:test:prepare