在开发环境中,一切正常但在生产中(部署到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
答案 0 :(得分:1)
在localhost上迁移时,构建模式以反映您的本地db状态,并且可以从生产中取消同步。也许你已经在迁移中改变了一些东西,但是heroku仍在使用旧版本。 Heroku是否运行迁移由文件名中的时间戳确定,而不是迁移的内容。
基本上,如果您有已部署的应用,请不要更改旧的迁移。如果您不介意销毁生产数据库中的所有数据,请运行heroku pg:reset DATABASE
,然后选择db:migrate again
。如果您无法删除数据,仍有办法解决问题 - 请参阅Rails rake db:migrate has no effect