2016-06-01 58 views
2

是否可以为PaperTrail宝石指定不同的表名称(versions除外)?Paper Trail的不同表格名称?

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

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

基本上,我希望表格为PaperTrailVersions以及访问路径的方法具有相似的名称空间。

任何想法?或者我应该只使用Audited宝石,它使用audits表格?

+0

这有帮助https://github.com/airblade/paper_trail/issues/128 –

回答

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表迁移)。您只需要在文件中重命名文件 classname。
  • 然后generate命令应该运行。它应该安装几个文件,他们的名字将被打印出来到控制台。
  • 现在打开新生成的create_versions迁移文件,并根据您的自定义版本的表名,如CreatePostVersions内从CreateVersions将其重命名以及类名的名称。同时将其中的versions表的任何提及重命名为您的自定义表名称,例如post_versions
  • 打开所有其他产生迁移,改变versions表名里面他们自定义的表名。不需要重命名这些文件。
  • 现在回到原来的(现在暂时改名)create_versions迁移文件,并将其重命名为其原始名称(还原对此文件的更改)。
  • 尝试运行迁移!应该现在的工作。

这些步骤可能看起来很麻烦,但他们只是暂时将旧迁移重命名为其他名称,以便生成命令可以运行。那么你只需要改变表名生成的迁移内到新的表名。

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

+0

这个例子展示了一个特定于模型的'PostVersion',但所有模型都应该可以使用相同的自定义版本类。 –

相关问题