2016-11-09 30 views
0

在开发环境中,一切正常,但在生产中(部署到Heroku时)它会抛出MissingAttributeError。生产中的ActiveModel :: MissingAttributeError(无法写入未知属性`order_id`)

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

您是否在Heroku上运行过迁移?似乎可能是罪魁祸首。 –

+0

@NickM,我做到了。同时在heroku上重新创建数据库 - 也没有工作。 –

+0

你是否在'git add .'和'git commit -m'中添加了mig''你的迁移,以便它可以被推送到heroku然后运行'heroku run rake db:migrate'? – DiegoSalazar

回答

1
当迁移本地主机上

,该架构是建立在反映您的本地数据库状态,并有可能为它是未同步从生产。也许你已经在迁移中改变了一些东西,但是heroku仍在使用旧版本。 Heroku是否运行迁移取决于文件名中的时间戳,而不是迁移的内容。

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

相关问题