根据docs (和specs),下面的STI设置应该可以将历史记录记录在我的代理子类下:
class Entity < ApplicationRecord
end
class Agency < Entity
has_paper_trail
end但是,历史记录上的item_type将存储为实体,并且版本历史记录未按预期工作
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
发布于 2021-04-15 02:27:57
issue #594中提到了这个错误,如果您在versions表中建立了一个item_subtype列,那么它提供了一种解决方法。
如果您希望代理始终引用子类名称--例如,示例中的“item_type”--那么可以通过引用这个版本的PaperTrail来解决这个问题:
gem 'paper_trail', github: 'paper-trail-gem/paper_trail', ref: '91deff4324e079cc2af044d5b9471c5ceaa50191'这样做的原因是这个问题在2018年年中在PR 1108中得到了修复。然而,在提交一个月后,修复被恢复了。从那时起,我们在一个大规模的应用程序中继续使用这个旧版本的PaperTrail,而且效果很好。
https://stackoverflow.com/questions/62646086
复制相似问题