如何使用Rails更新昨天创建的所有记录?

时间:2014-12-11 06:49:51

标签: ruby-on-rails ruby database-migration

我需要更新昨天创建的所有记录的信息,因为我使用以下代码创建了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

然而,这不起作用。你能指点一下我做错了吗?

谢谢!

2 个答案:

答案 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任务而不是迁移文件,这样的查询是不可逆的(即您不能依赖于改回以前的状态),不应该成为迁移的一部分。