【问题标题】:How to migrate paper_trail's whodunnit column from string to integer?如何将 paper_trail 的 whodunnit 列从字符串迁移到整数?
【发布时间】: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


    【解决方案1】:

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

    正确,列必须命名为whodunnit。不可配置。

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

    【讨论】:

      猜你喜欢
      • 2020-03-17
      • 2019-03-30
      • 2018-12-31
      • 1970-01-01
      • 1970-01-01
      • 2017-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多