has_many 使用 STI 超慢的示波器

has_many with a scope super slow with STI

class User < ApplicationRecord
  has_many :buckets, -> { order(ranked_row: :asc) }
  delegate :incomes, :fixed_costs, :financial_goals, to: :buckets

  ...
end

我有 Buckets,是 STI'd。如果我将该范围添加到 has_many,我的页面将永远占用 9 条记录,并且似乎正在加载应该缓存的内容

如果我删除范围,一切都很好

知道 has_many 的范围如何影响 STI 吗? ranked_row 有一个索引,但无论如何都是一样的。我正在使用 active_model_serializers,但我不确定是否存在相关性。

更新

绝对是 active_model_serializers。 ActiveModel::SerializableResource.new(user) 在控制器中,也在控制台中停滞不前。我从序列化程序中删除了所有内容,调用范围 has_many 就是这样。我会打起来 github.

代码

https://gist.github.com/dudo/f25767f00c874842a005

这是我能得到的导致问题的最小代码。同样,它在没有 has_many 范围的情况下工作正常,并且它还可以从 Bucket 中删除 percent_complete 方法......该方法看起来不太讨厌。当范围存在时,那个 included_transactions 方法可能会导致它爬行?

向 has_many 添加作用域时,您需要显式声明 inverse_of

https://github.com/rails/rails/blob/7f18ea14c893cb5c9f04d4fda9661126758332b5/guides/source/4_1_release_notes.md