ruby-on-rails - validates - ruby on rails入门




为什么我会在Rails 4中得到一个未知的主键异常? (3)

在模型中添加

self.primary_key = [:order_id, :product_id]

我认为确保这些专栏有索引是明智的。 您可以使用以下迁移创建一个

add_index :line_items, [:order_id, :product_id]

这些是我的模特:

class Product
  has_many :line_items
  has_many :orders, :through => :line_items
end

class LineItem 
  belongs_to :order
  belongs_to :product
end

class Order
    has_many :line_items
    has_many :products, :through => :line_items
end

从schema.rb:

  create_table "line_items", id: false, force: true do |t|
    t.integer  "order_id"
    t.integer  "product_id"
    t.integer  "quantity"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

我刚升级到Rails 4,我的连接表停止工作。 如果我执行@order.line_items ,则会引发“模型LineItem中的table line_items的未知主键”异常。 @order.products按预期工作。

我已经尝试删除并重新创建line_items表,我已经尝试安装protected_attributes gem,但没有任何改变。

这是跟踪


接受的答案摆脱了错误消息,但我仍然无法保存@ order.line_items没有得到一个错误告诉我[:order_id,:product_id]不存在。

我终于通过删除line_items表并用这个迁移重新创建它来解决这个问题:

  def change
    create_table :line_items do |t|
      t.references :order
      t.references :product
      t.integer :quantity
      t.timestamps
    end
  end

当我最初创建表时,我并没有使用“引用”,Rails 3并不介意,但让Rails 4抱怨。


我有这个错误,但删除我的本地数据库与rake db:drop ,然后创建与rake db:create之前与heroku数据库转储运行pg_restore解决了它。





jointable