为什么 order() 对 papertrail 版本关联没有生效?

Why isn't order() taking effect on papertrail version associations?

提问人:digitalWestie 提问时间:10/18/2023 更新时间:10/18/2023 访问量:23

问:

我正在使用 papertrail gem 来跟踪我的问题和结果模型的版本。

我可以像这样成功订购Papertrail::Versions:

PaperTrail::Version.order(created_at: :desc).limit(1).select(:id)
  PaperTrail::Version Load (0.3ms)  SELECT "versions"."id" FROM "versions" ORDER BY "versions"."created_at" DESC LIMIT $1  [["LIMIT", 1]]
=> [#<PaperTrail::Version:0x00007f4d90820f20 id: 32>]


PaperTrail::Version.order(created_at: :asc).limit(1).select(:id)
  PaperTrail::Version Load (0.9ms)  SELECT "versions"."id" FROM "versions" ORDER BY "versions"."created_at" ASC LIMIT $1  [["LIMIT", 1]]
=> [#<PaperTrail::Version:0x00007f4d90935500 id: 10>]

但是当我通过关联尝试同样的事情时,order() 似乎没有生效!

为了说明,下面是一个结果对象,它有 9 个关联的版本:

Outcome.last.versions.count
  Outcome Load (0.4ms)  SELECT "outcomes".* FROM "outcomes" ORDER BY "outcomes"."id" DESC LIMIT $1  [["LIMIT", 1]]
  PaperTrail::Version Count (0.4ms)  SELECT COUNT(*) FROM "versions" WHERE "versions"."item_id" = $1 AND "versions"."item_type" = $2  [["item_id", 1], ["item_type", "Outcome"]]
=> 9

created_at排序应返回不同的版本记录,但它们不会。:/

Outcome.last.versions.order(created_at: :asc).limit(1).select(:id)
  Outcome Load (0.5ms)  SELECT "outcomes".* FROM "outcomes" ORDER BY "outcomes"."id" DESC LIMIT $1  [["LIMIT", 1]]
  PaperTrail::Version Load (0.5ms)  SELECT "versions"."id" FROM "versions" WHERE "versions"."item_id" = $1 AND "versions"."item_type" = $2 ORDER BY "versions"."created_at" ASC, "versions"."id" ASC LIMIT $3  [["item_id", 1], ["item_type", "Outcome"], ["LIMIT", 1]]
=> [#<PaperTrail::Version:0x00007f4d83e6f140 id: 29>]


Outcome.last.versions.order(created_at: :desc).limit(1).select(:id)
  Outcome Load (0.4ms)  SELECT "outcomes".* FROM "outcomes" ORDER BY "outcomes"."id" DESC LIMIT $1  [["LIMIT", 1]]
  PaperTrail::Version Load (0.4ms)  SELECT "versions"."id" FROM "versions" WHERE "versions"."item_id" = $1 AND "versions"."item_type" = $2 ORDER BY "versions"."created_at" ASC, "versions"."id" ASC, "versions"."created_at" DESC LIMIT $3  [["item_id", 1], ["item_type", "Outcome"], ["LIMIT", 1]]
=> [#<PaperTrail::Version:0x00007f4d83e66e00 id: 29>]
Ruby-on-Rails PostgreSQL ActiveRecord Paper-Trail-gem

评论


答:

0赞 digitalWestie 10/18/2023 #1

好的 - 当我写这篇文章时,我意识到可能有一个默认范围......果然有。答案是在查询关联时使用,例如.unscoped

Outcome.last.versions.unscoped.order(created_at: :desc).limit(1).select(:id)

评论

1赞 AbM 10/18/2023
文档reorder