尝试稍微更改我的数据库。我有两个名为User
的表和一个名为Plan
的表。我想执行一个迁移,它会在我的User
表中添加一列,并根据Plan
表中列的值设置该列的默认值。然后将Plan
表与User
表中与Plan
关联的任何其他列一起删除。以下是我到目前为止的代码,但我不确定它是否是最好的方法。
class DropPlansAddPurchasedAuctionsToCompany < ActiveRecord::Migration
def up
add_column :users, :purchased_items, :integer, default: 0, after: :legal_name
User.update_all(:purchased_items => -1).where("plan_id IS NOT NULL")
remove_column :users, :plan_id
remove_column :users, :plan_started_at
remove_column :users, :disable_plan_limits
drop_table :plans
end
def down
raise ActiveRecord::IrreversibleMigration, "Can't recover plans table"
end
end
我认为这是正确的方向但是当我运行迁移时,我收到以下错误消息:NoMethodError: undefined method 'where' for 3:Fixnum
有任何见解或建议吗?如果您需要更多信息,我可以提供。
答案 0 :(得分:1)
update_all
返回已更新的记录数,这是一个数字,而不是关系。
您应该在where
:
update_all
User.where("plan_id IS NOT NULL").update_all(:purchased_items => -1)