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

后端 未结 4 700
抹茶落季
抹茶落季 2021-01-03 18:06

I have the following models:

class Ad < ActiveRecord::Base
  belongs_to :page

  has_one :image
  has_one :logo
end

class Page < ActiveRecord::Base
           


        
相关标签:
4条回答
  • 2021-01-03 18:18

    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.

    0 讨论(0)
  • 2021-01-03 18:19

    Check your test database.

    In my case, sometimes I did not modify the columns in the test database after modifying the development database after an incorrect migration.

    0 讨论(0)
  • 2021-01-03 18:29

    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
    
    0 讨论(0)
  • 2021-01-03 18:40

    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::Jar
    has_many :snacks, class_name: Pantry::Snack
    accepts_nested_attributes_for :snacks
    
    Pantry::Snack
    belongs_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
    
    0 讨论(0)
提交回复
热议问题