如何将paper_trail的whodunnit列从字符串迁移到整数?

时间:2018-11-26 12:54:19

标签: ruby-on-rails paper-trail-gem

在使用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中;
  • 通过电子邮件查找用户并在新列中保存其ID,为旧记录回填whodunnit_new
  • 删除whodunnit列;
  • whodunnit_new重命名为whodunnit,并删除模型中用于使用whodunnit_new的设置。

问题是-我找不到设置,它可以设置whodunnit列的名称,在我看来,它是硬编码的。我看到whodunnit方法有一个别名(称为version_author)。

我正在使用Papertrail 10和Rails 5.2。

所以我的问题-进行所述迁移的正确方法应该是什么。

1 个答案:

答案 0 :(得分:1)

  

..我找不到设置,它可以设置whodunnit列的名称,在我看来,它是硬编码的。

正确,该列必须命名为whodunnit。这是不可配置的。

否则,您的迁移听起来不错。使用事务,您将不需要临时重命名该列。 (除非您使用的MySQL具有“弱”事务,即不受DDL保护)