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
。
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
。