是否可以为PaperTrail gem指定不同的表名(versions
除外)?
在我的Rails应用程序中,我已经有了一个版本模型/表格,它与活动记录版本控制无关(我的应用程序让我们使用fork a"原型"无论好坏我使用"版本"作为这些叉子的标签)。它通过我的应用程序非常普遍,我不想重命名。
运行bundle exec rails generate paper_trail:install
时,我得到Migration already exists: create_versions
。
基本上,我希望表格PaperTrailVersions
以及访问路径的方法同样是命名空间。
有什么想法吗?或者我应该只使用使用audits
表的Audited gem吗?
答案 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。这些是您需要修改的文件。