首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有STI的PaperTrail似乎存储了错误的item_type

带有STI的PaperTrail似乎存储了错误的item_type
EN

Stack Overflow用户
提问于 2020-06-30 04:20:11
回答 1查看 82关注 0票数 0

根据docs (和specs),下面的STI设置应该可以将历史记录记录在我的代理子类下:

代码语言:javascript
复制
class Entity < ApplicationRecord
end

class Agency < Entity
  has_paper_trail
end

但是,历史记录上的item_type将存储为实体,并且版本历史记录未按预期工作

代码语言:javascript
复制
pry> Agency.create name:'My Org'
=> #<Agency:0x00007fab7b003740
 id: 103,
 type: "Agency",
 name: "My Org"
 ...
pry> Agency.last.version
  Agency Load (0.4ms)  SELECT "entities".* FROM "entities" WHERE "entities"."type" = $1 ORDER BY "entities"."id" DESC LIMIT $2  [["type", "Agency"], ["LIMIT", 1]]
=> nil
pry> Agency.last.versions
PaperTrail::Version Load (0.4ms)  SELECT "versions".* FROM "versions" WHERE "versions"."item_id" = $1 AND "versions"."item_type" = $2 ORDER BY "versions"."created_at" ASC, "versions"."id" ASC  [["item_id", 103], ["item_type", "Entity"]]
=> [#<PaperTrail::Version:0x00007fab72ec2118
  id: 222,
  item_type: "Entity",
  item_id: 103,
  event: "create",
  whodunnit: nil,
  object: nil,
  created_at: Mon, 29 Jun 2020 15:59:24 EDT -04:00,
  object_changes:
   {"id"=>[nil, 103],
    "name"=>[nil, "My Org"],
    "slug"=>[nil, "my-org"],
    "type"=>[nil, "Agency"],
    "created_at"=>[nil, "2020-06-29T15:59:24.344-04:00"],
    "updated_at"=>[nil, "2020-06-29T15:59:24.344-04:00"]}>] 

我是不是漏掉了什么,或者这可能是个bug?

Rails 6.0.3.2,PaperTrail 10.3.1

EN

回答 1

Stack Overflow用户

发布于 2021-04-15 02:27:57

issue #594中提到了这个错误,如果您在versions表中建立了一个item_subtype列,那么它提供了一种解决方法。

如果您希望代理始终引用子类名称--例如,示例中的“item_type”--那么可以通过引用这个版本的PaperTrail来解决这个问题:

代码语言:javascript
复制
gem 'paper_trail', github: 'paper-trail-gem/paper_trail', ref: '91deff4324e079cc2af044d5b9471c5ceaa50191'

这样做的原因是这个问题在2018年年中在PR 1108中得到了修复。然而,在提交一个月后,修复被恢复了。从那时起,我们在一个大规模的应用程序中继续使用这个旧版本的PaperTrail,而且效果很好。

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

https://stackoverflow.com/questions/62646086

复制
相关文章

相似问题

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