Rails: 在所有表中的日期时间列中递增

Rails: increment in a datetime column in all tables

假设我有 20 个 table 并且每个 table 都有列 updated_at 我想更新所有 table 中的所有行,例如每一行的updated_at 专栏应增加 1 小时。

如何避免更新活动记录对象我更愿意运行一个SQL查询而不是每个table一个查询一个table .

如果您在 SO 的数据库管理部分提出这个问题,我想您会得到更好的答复。

我试过谷歌搜索,可以找到:

https://www.w3schools.com/sql/func_sqlserver_dateadd.asp

SELECT DATEADD(month, 2, '2017/08/25') AS DateAdd;

所以在你的情况下,如果它被称为 updated_at 并且 table 是用户:

SELECT UpdatedAt, DATEADD(hour, 1, UpdatedAt) AS DateAdd FROM Employees;

我在 SQL 方面很糟糕,但我认为这应该是有道理的。

如果它不起作用,请将其重新发布到数据库部分,您将有知道他们在说什么的人帮助您:)

如果您使用 update_columns

,您可以通过 Rails 控制台完成此操作而无需实际实例化 ActiveRecord 对象

你应该能够做到:

YourThing.find_each do |thing|
  new_time = thing.updated_at + 1.hour
  thing.update_columns(updated_at: new_time)
end

这将绕过验证和所有回调,因此它应该 运行 相当快,具体取决于您正在处理的记录数量。

这是 update_columns 的文档:https://apidock.com/rails/ActiveRecord/Persistence/update_columns

只是为了帮助这里的其他人,我是如何解决这个问题的

ActiveRecord::Base.connection.execute("UPDATE users SET created_at = created_at + INTERVAL '3600 seconds'")