Rails: увеличение столбца datetime во всех таблицах - PullRequest
0 голосов
/ 15 марта 2019

Допустим, у меня есть 20 таблиц, и у каждой таблицы есть столбец updated_at. Я хочу обновить все строки во всех таблицах, например, поле updated_at каждой строки должно увеличиться на 1 час. Как я могу сделать это, избегая обновления объекта активных записей? Я бы предпочел вместо этого выполнять SQL-запрос для каждой таблицы по одному запросу для одной таблицы.

Ответы [ 3 ]

1 голос
/ 15 марта 2019

Если вы зададите этот вопрос в разделе администрирования базы данных SO, я думаю, вы получите гораздо лучший ответ.

Я попробовал поискать в Google и могу найти:

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

SELECT DATEADD (месяц, 2, «2017/08/25») AS DateAdd;

Так что в вашем случае, если он называется updated_at и таблица это users:

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

Я довольно дерьмовый в SQL, но я думаю, что это имеет смысл.

Если это не сработает, разместите это в разделе базы данных, и у вас будут люди, которые знают, о чем они говорят, и помогут вам:)

0 голосов
/ 20 марта 2019

, чтобы помочь другим, вот как я смог решить эту проблему

ActiveRecord::Base.connection.execute("UPDATE users SET created_at = created_at + INTERVAL '3600 seconds'")
0 голосов
/ 15 марта 2019

Это можно сделать через консоль Rails, не создавая экземпляров объектов ActiveRecord, если вы используете update_columns

Вы должны быть в состоянии сделать:

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

...