나는 객체의 배열을 가지고 있습니다 Indicator
. def self.subjects
이 배열 에서 Indicator 클래스 메서드 ( 다양성, 범위 등) 를 실행하고 싶습니다 . 개체 그룹에서 클래스 메서드를 실행하는 유일한 방법은 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
(레일 4에서는에서 작동합니다.all
). 배열을 관계로