生产中的ActiveModel :: MissingAttributeError(不能写未知属性`order_id`)

时间:2016-11-09 16:03:08

标签: ruby-on-rails ruby postgresql heroku ruby-on-rails-5

在开发环境中,一切正常但在生产中(部署到Heroku时)它会抛出MissingAttributeError。

class Order < ApplicationRecord
  has_many :cart_items, dependent: :destroy
end

class CartItem < ApplicationRecord
  belongs_to :order, optional: true, foreign_key: "order_id"
end

create_table "cart_items", force: :cascade do |t|
  t.integer  "item_id"
  t.integer  "cart_id"
  t.integer  "user_id"
  t.integer  "order_id"
end

1 个答案:

答案 0 :(得分:1)

在localhost上迁移时,构建模式以反映您的本地db状态,并且可以从生产中取消同步。也许你已经在迁移中改变了一些东西,但是heroku仍在使用旧版本。 Heroku是否运行迁移由文件名中的时间戳确定,而不是迁移的内容。

基本上,如果您有已部署的应用,请不要更改旧的迁移。如果您不介意销毁生产数据库中的所有数据,请运行heroku pg:reset DATABASE,然后选择db:migrate again。如果您无法删除数据,仍有办法解决问题 - 请参阅Rails rake db:migrate has no effect