Rails模型关系MissingAttributeError

时间:2015-06-19 03:09:27

标签: ruby-on-rails ruby ruby-on-rails-4 model ruby-on-rails-3.2

我的应用程序中有一些模型,我试图保存数据,但是我收到了错误:

ActiveModel :: MissingAttributeError(无法写入未知属性product_id):   app / controllers / admin_controller.rb:27:在`create_product'

我有3个模特

类别模型

class Category < ActiveRecord::Base
    has_many :features
    has_many :products
end

迁移:

class CreateCategories < ActiveRecord::Migration
   def change
     create_table :categories do |t|
     t.string :name, null: false
     t.boolean :active, null: false, default: false 
     t.timestamps null: false
   end
end

特征模型

class Feature < ActiveRecord::Base
    has_and_belongs_to_many :categories
    has_and_belongs_to_many :products
 end

移植

class CreateFeatures < ActiveRecord::Migration
   def change
      create_table :features do |t|
      t.belongs_to :category, index:true
      t.string :name, null: false
      t.timestamps null: false
   end
 end

产品型号

class Product < ActiveRecord::Base
    belongs_to :category
    has_many :features 
end

移植

class CreateProducts < ActiveRecord::Migration
   def change
      create_table :products do |t|
      t.belongs_to :category, index:true
      t.string :name, null: false
      t.text :rating, null: false
      t.timestamps null: false
    end
 end

当我尝试保存产品时出现此错误

  

ActiveModel :: MissingAttributeError(无法写入未知属性product_id):     app / controllers / admin_controller.rb:27:在`create_product&#39;

我无法弄清楚发生了什么

任何想法?

由于

1 个答案:

答案 0 :(得分:2)

如果你看一下你的错误,它会清楚地说明

  

ActiveModel :: MissingAttributeError(无法写入未知属性product_id)

因此您没有product_id字段并查看您的关联和功能表迁移,您忘记在功能表中添加product_id字段。

FIX:

要在功能表中添加product_id字段,您需要创建一个新的迁移,然后将其迁移到db:

rails g migration AddProductIdToFeatures product_id:integer
rake db:migrate