我有一个对象数组,我们称它为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
每次都做。 - 在
def self.subjects
ActiveRecord :: Relation上运行类型方法时,如何访问该ActiveRecord :: Relation对象本身?
谢谢。如果我需要澄清任何事情,请告诉我。
.all
,则可以使用它,.scoped
就像Andrew Marshall的答案所示(尽管在rails 4中可以使用.all
)。如果您发现自己需要将数组转换为关系,那么您在某个地方出错了