ActiveRecord :: UnknownAttributeError:未知属性' customer_id'订单

时间:2016-02-25 01:53:46

标签: ruby-on-rails activerecord

我有一个客户,物品和订单模型。客户has_many物品通过订单和has_many订单。物品has_many客户通过订单和has_many订单。订单属于客户和项目。尝试通过控制台保存时出现ActiveRecord::UnknownAttributeError: unknown attribute 'customer_id' for Order.错误:

客户型号:

class Customer < ActiveRecord::Base
  has_many :orders
  has_many :items, through: :orders

  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

end

项目型号:

class Item < ActiveRecord::Base
  has_many :orders
  has_many :customers, through: :orders
end

订单型号:

class Order < ActiveRecord::Base
  belongs_to :item
  belongs_to :customer
end

订单表:

class CreateOrders < ActiveRecord::Migration
  def change
    create_table :orders, id: false do |t|
      t.belongs_to :customers, index: true
      t.belongs_to :items, index: true
      t.timestamps null: false
    end
  end
end

保存订单的控制台命令 (请注意,cuban_sandwich和chris已保存为新的Customer和Item。)

order1 = chris.orders.build(customers_id: chris.id, items_id: cuban_sandwich.id)

我可以错误地保存吗?或者我的模型/表关联有问题吗?

2 个答案:

答案 0 :(得分:2)

首先确保customer_id

上有orders
rails g migration AddCustomerIdToOrders customer_id:integer
rake db:migrate

此外,我不认为您需要放置customers_id,因为它将在关联时填写。您还需要使用create而不是build

而不是

order1 = chris.orders.build(customers_id: chris.id, items_id: cuban_sandwich.id)

试试这个

order1 = chris.orders.create(items_id: cuban_sandwich.id)

答案 1 :(得分:2)

您的问题是由于您的迁移造成的。这些行:

t.belongs_to :customers, index: true
t.belongs_to :items, index: true

创建名为customers_iditems_id的字段,而非customer_iditems_id(注意单数与复数)。

属于关联是一对一关系,所以它应该是单数,customer_id

使用rake db:rollback回滚您的迁移,并将两个belongs_to来电更改为customeritem