我需要更新昨天创建的所有记录的信息,因为我使用以下代码创建了migration
:
class UpdateFbidToVotes < ActiveRecord::Migration
def up
Vote.all.each do |v|
if v.created_at == Date.today-1
v.fbid = v.fbid + 1
v.update!
end
end
end
end
然而,这不起作用。你能指点一下我做错了吗?
谢谢!
答案 0 :(得分:2)
这样的事情:
Vote.where(created_at: Date.yesterday).update_all('fbid = fbid + 1')
答案 1 :(得分:1)
尝试:
yesterday = 1.day.ago # or Time.now.yesterday
Vote.where(created_at: yesterday.beginning_of_day..yesterday.end_of_day).update_all('fbid = fbid + 1')
此外,迁移文件用于管理表模式,我建议您将此类db更新/删除查询移动到rake任务而不是迁移文件,这样的查询是不可逆的(即您不能依赖于改回以前的状态),不应该成为迁移的一部分。