首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >纸质痕迹宝石:如何为特定型号使用自定义item_type

纸质痕迹宝石:如何为特定型号使用自定义item_type
EN

Stack Overflow用户
提问于 2016-05-12 09:14:48
回答 3查看 868关注 0票数 2

是否有为某个版本配置item_type的选项?我有一个Post类,它的默认item_type是Post;是否可以选择将其配置为Foo

使用示例进行更新:

代码语言:javascript
复制
class Post < ActiveRecord::Base
  has_paper_trail
end

post = Post.create # this creates a new post along with a version.
version = post.versions.first
version.item_type = 'Post' # Item type here is the name of the base model 'Post'.
EN

回答 3

Stack Overflow用户

发布于 2016-06-06 14:20:03

是否有为某个版本配置item_type的选项?我有一个类Post,它的默认item_type是Post;有没有一个选项可以配置为Foo?

不是的。

下面是has_many关联的定义:

代码语言:javascript
复制
has_many(
  versions_association_name, # Usually "versions"
  -> { order(model.timestamp_sort_order) }, # Usually "created_at"
  class_name: version_class_name, # Usually "PaperTrail::Version"
  as: :item # Specifies a polymorphic interface
)
票数 0
EN

Stack Overflow用户

发布于 2017-01-23 23:23:18

只是偶然发现了这一点,现在意识到它有点老了,但我想我应该分享我的解决方案,因为我有同样的需求。这只是一个部分的解决方案,但它对我很有效

我已经扩展了PaperTrail版本类并覆盖了item_type getter

代码语言:javascript
复制
class AuditTrail < PaperTrail::Version
xss_foliate :except => [:object, :object_changes]

    def item_type
        if(self[:item_type] == "SomethingIWantToChange")
            return "Different String"
        end

        return self[:item_type]
    end
end

然后,我将我的每个模型设置为使用这个类,如下所示:

代码语言:javascript
复制
has_paper_trail :class_name => 'AuditTrail'

然后,我可以查询versions表,返回的对象将通过覆盖的getter运行,item_type将如我所需:

代码语言:javascript
复制
audit_records = AuditTrail.where(someproperty: "something")

因此,这实际上不会改变它在数据库中的编写,但这是我能找到的将它以不同方式呈现给我的前端的最好方法

请注意,如果您在不使用扩展对象查询的情况下获取版本,则不会更改item_type:

代码语言:javascript
复制
Someobject.find(1).versions.last

^这仍会从数据库返回item_type

票数 0
EN

Stack Overflow用户

发布于 2016-05-13 04:27:37

您需要class_name选项。这应该适用于您的示例:

代码语言:javascript
复制
class Post < ActiveRecord::Base
  has_paper_trail :class_name => 'Foo'
end

这会将Post类版本化为Foo

您可以在Custom Version Classes部分的Paper Trail文档中找到更多详细信息。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37175689

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档