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'")
假设我有 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
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'")