В устаревшем приложении Rails, использующем paper_trail, для столбца whodunnit
задано значение string, и вместо значения по умолчанию current_user.id
в этом столбце содержится электронная почта пользователя.Это достигается путем переопределения user_for_paper_trail
в ApplicationController
:
def user_for_paper_trail
current_user.email
end
Теперь я хочу перейти к стандартному поведению хранения идентификатора текущего пользователя вместо электронной почты.
Таким образом, подход, который я собирался применить, был примерно таким:
- добавить новый целочисленный столбец в таблицу
versions
, возможно, с именем whodunnit_new
; - remove
user_for_paper_trail
метод в контроллере приложения и скажите моделям записать информацию whodunnit в whodunnit_new
вместо whodunnit
.Это означает, что для новых версий paper_trail сохраняет id
в whodunnit_new
и не сохраняет email
в whodunnit
; - backfill
whodunnit_new
для старых записей, находя пользователя по электронной почте исохранение идентификатора их в новом столбце; - перетаскивание столбца
whodunnit
; - переименование
whodunnit_new
в whodunnit
и удаление настроек в моделях для использования whodunnit_new
.
Проблема в том, что я не смог найти параметр, который мог бы задать имя столбца whodunnit, мне кажется, что он жестко запрограммирован.Я видел, что есть псевдоним для метода whodunnit
(называемый version_author
).
Я использую Papertrail 10 и Rails 5.2.
Так что мой вопрос - что должно бытьправильный способ выполнения описанной миграции.