最佳答案
我有一个对象数组,我们称之为 Indicator
。我想在这个数组上运行 Indicator 类方法(def self.subjects
变体、范围等的方法)。我所知道的在一组对象上运行类方法的唯一方法是使它们成为 ActiveRecord: : Relations。因此,我最终求助于向 Array
添加一个 to_indicators
方法。
def to_indicators
# TODO: Make this less terrible.
Indicator.where id: self.pluck(:id)
end
有时候,我会在类方法中链接相当多的这些作用域来过滤结果。因此,即使我调用 ActiveRecord: : Relations 上的方法,我也不知道如何访问该对象。我只能通过 all
得到它的内容。但是 all
是一个数组。然后我必须把这个数组转换成 ActiveRecord: : 关系。例如,这是其中一种方法的一部分:
all.to_indicators.applicable_for_bank(id).each do |indicator|
total += indicator.residual_risk_for(id)
indicator_count += 1 if indicator.completed_by?(id)
end
我想这可以归结为两个问题。
where
。def self.subjects
type method on an ActiveRecord::Relation, how do I access that ActiveRecord::Relation object itself?谢谢。如果我需要澄清什么,让我知道。