オブジェクトの配列があります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.subjects
ActiveRecord :: Relationでtypeメソッドを実行するとき、そのActiveRecord :: Relationオブジェクト自体にどのようにアクセスしますか?
ありがとう。明確にする必要がある場合はお知らせください。
.all
、.scoped
Andrew Marshallの回答が示すように使用します(ただし、rails 4ではで動作します.all
)。配列を関係に変換する必要があることに