在使用paper_trail的旧版Rails应用程序中,whodunnit
列设置为字符串,而不是默认的current_user.id
列,该列用于保存用户的电子邮件。这是通过在user_for_paper_trail
中覆盖ApplicationController
来实现的:
def user_for_paper_trail
current_user.email
end
现在,我想迁移到默认行为,即存储当前用户的ID而不是电子邮件。
所以我想采取的方法是这样的:
versions
表中添加一个新的整数列,可能名为whodunnit_new
; user_for_paper_trail
方法,并告诉模型在whodunnit_new
中而不是whodunnit
中写入whodunnit信息。这意味着,对于新版本,paper_trail会将id
保存在whodunnit_new
中,而不是将email
保存在whodunnit
中; whodunnit_new
; whodunnit
列; whodunnit_new
重命名为whodunnit
,并删除模型中用于使用whodunnit_new
的设置。问题是-我找不到设置,它可以设置whodunnit列的名称,在我看来,它是硬编码的。我看到whodunnit
方法有一个别名(称为version_author
)。
我正在使用Papertrail 10和Rails 5.2。
所以我的问题-进行所述迁移的正确方法应该是什么。
答案 0 :(得分:1)
..我找不到设置,它可以设置whodunnit列的名称,在我看来,它是硬编码的。
正确,该列必须命名为whodunnit
。这是不可配置的。
否则,您的迁移听起来不错。使用事务,您将不需要临时重命名该列。 (除非您使用的MySQL具有“弱”事务,即不受DDL保护)