【发布时间】:2018-12-13 02:25:00
【问题描述】:
在使用 paper_trail 的旧版 Rails 应用程序中,whodunnit 列设置为字符串,而不是默认的 current_user.id,此列包含用户的电子邮件。这是通过在ApplicationController 中覆盖user_for_paper_trail 来实现的:
def user_for_paper_trail
current_user.email
end
现在我想迁移到存储当前用户的 id 而不是电子邮件的默认行为。
所以我想采取的方法是这样的:
- 在
versions表中添加一个新的整数列,可能命名为whodunnit_new; - 删除应用程序控制器中的
user_for_paper_trail方法,并告诉模型将whodunnit 信息写入whodunnit_new而不是whodunnit。这意味着,对于新版本,paper_trail 将id保存在whodunnit_new中,而不是将email保存在whodunnit中; - 通过电子邮件查找用户并将其 ID 保存在新列中,为旧记录回填
whodunnit_new; - 删除
whodunnit列; - 将
whodunnit_new重命名为whodunnit,并删除模型中使用whodunnit_new的设置。
问题是 - 我找不到可以设置 whodunnit 列的名称的设置,在我看来,它是硬编码的。我看到whodunnit 方法有一个别名(称为version_author)。
我正在使用 Papertrail 10 和 Rails 5.2。
所以我的问题 - 进行所描述的迁移的正确方法应该是什么。
【问题讨论】:
标签: ruby-on-rails paper-trail-gem