Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何将paper_trail的whodunnit列从字符串迁移到整数?_Ruby On Rails_Paper Trail Gem - Fatal编程技术网

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

Ruby on rails 如何将paper_trail的whodunnit列从字符串迁移到整数?,ruby-on-rails,paper-trail-gem,Ruby On Rails,Paper Trail Gem,在使用paper_trail的传统Rails应用程序中,whodunnit列被设置为string,而不是默认的current_user.id,此列保存用户的电子邮件。这是通过在ApplicationController中覆盖用户\u for\u paper\u trail来实现的: 现在我想迁移到存储当前用户id而不是电子邮件的默认行为 所以我想采取的方法是这样的: 在版本表中添加一个新的整数列,可能名为whodunnit\u new; 在应用程序控制器中删除用户\u for\u paper\u

在使用paper_trail的传统Rails应用程序中,whodunnit列被设置为string,而不是默认的current_user.id,此列保存用户的电子邮件。这是通过在ApplicationController中覆盖用户\u for\u paper\u trail来实现的:

现在我想迁移到存储当前用户id而不是电子邮件的默认行为

所以我想采取的方法是这样的:

在版本表中添加一个新的整数列,可能名为whodunnit\u new; 在应用程序控制器中删除用户\u for\u paper\u trail方法,并告诉模型将whodunnit信息写入whodunnit\u new而不是whodunnit。这意味着,对于新版本,paper\u trail将id保存在whodunnit\u new中,而不是将电子邮件保存在whodunnit中; 通过电子邮件查找用户并将其id保存在新列中,为旧记录回填whodunit_new; 删除whodunnit列; 将whodunnit_new重命名为whodunnit,并删除模型中使用whodunnit_new的设置。 问题是-我找不到一个可以设置whodunnit列名称的设置,在我看来,它是硬编码的。我看到whodunnit方法有一个别名,叫做version\u author

我正在使用Papertrail 10和Rails 5.2

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

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

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

否则你的迁移听起来不错。如果使用事务,则不需要临时重命名该列。除非您使用的是MySQL,因为MySQL具有弱事务,即不受DDL保护

def user_for_paper_trail
  current_user.email
end