我有一个对象数组,我们称它为Indicator
. 我想def self.subjects
在这个数组上运行指标类方法(种类、范围等)。我知道在一组对象上运行类方法的唯一方法是让它们成为 ActiveRecord::Relation。所以我最终求助于to_indicators
向Array
.
def to_indicators
# TODO: Make this less terrible.
Indicator.where id: self.pluck(:id)
end
有时我会在类方法中链接很多这些范围来过滤结果。因此,即使我在 ActiveRecord::Relation 上调用方法,我也不知道如何访问该对象。我只能通过all
. 但是all
是一个数组。那么我必须将该数组转换为 ActiveRecord::Relation。例如,这是其中一种方法的一部分:
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
我想这可以归结为两个问题。
- 如何将对象数组转换为 ActiveRecord::Relation?最好不要
where
每次都做。 - 在 ActiveRecord::Relation 上运行
def self.subjects
类型方法时,如何访问该 ActiveRecord::Relation 对象本身?
谢谢。如果我需要澄清任何事情,请告诉我。