オブジェクトの配列があります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に変換する必要があります。たとえば、これはメソッドの1つに含まれています。
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
これは2つの質問に要約されると思います。
- オブジェクトの配列をActiveRecord :: Relationに変換するにはどうすればよいですか?
where毎回行うことはできません。 def self.subjectsActiveRecord :: Relationでtypeメソッドを実行するとき、そのActiveRecord :: Relationオブジェクト自体にどのようにアクセスしますか?
ありがとう。明確にする必要がある場合はお知らせください。
.all、.scopedAndrew Marshallの回答が示すように使用します(ただし、rails 4ではで動作します.all)。配列を関係に変換する必要があることに