Paper Trail的不同表名?

时间:2016-06-01 01:02:52

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

是否可以为PaperTrail gem指定不同的表名(versions除外)?

在我的Rails应用程序中,我已经有了一个版本模型/表格,它与活动记录版本控制无关(我的应用程序让我们使用fork a"原型"无论好坏我使用"版本"作为这些叉子的标签)。它通过我的应用程序非常普遍,我不想重命名。

运行bundle exec rails generate paper_trail:install时,我得到Migration already exists: create_versions

基本上,我希望表格PaperTrailVersions以及访问路径的方法同样是命名空间。

有什么想法吗?或者我应该只使用使用audits表的Audited gem吗?

1 个答案:

答案 0 :(得分:2)

PaperTrail支持custom version classes,可以定义自定义表名。

class PostVersion < PaperTrail::Version
  self.table_name = :post_versions
end

class Post < ActiveRecord::Base
  has_paper_trail :class_name => 'PostVersion'
end

从失败的generate命令开始,我会尝试这些步骤(虽然没有测试过):

  • 您已经有一个名为CreateVersions的迁移,因为您已经拥有versions表。这就是generate命令失败的原因 - 它无法创建具有相同名称的迁移。我认为您只需暂时重命名旧迁移(对于原始的versions表迁移)。您只需要将文件重命名为文件中的类名。
  • 然后应运行 generate 命令。它应该安装一些文件,它们的名字将打印到控制台。
  • 现在打开新生成的create_versions迁移文件,并根据您的自定义版本表名称将其重命名为CreateVersions 内的类名称,例如为CreatePostVersions。同时将其中versions表的任何提及重命名为您的自定义表名,例如: post_versions
  • 打开所有其他生成的迁移,并将versions表名更改为其中的自定义表名。不需要重命名这些文件。
  • 现在返回原始(现在暂时重命名)的create_versions迁移文件,并将其重命名为原始名称(还原此文件中的更改)。
  • 尝试运行迁移!现在应该可以正常运行。

这些步骤可能看起来很麻烦,但它们只是暂时将旧迁移重命名为其他内容,以便生成命令。然后,您只需将生成的迁移中的表名更改为新的表名。

在源代码中可以看到使用generate命令生成的文件here。这些是您需要修改的文件。