次のモデルがあるとします。
class Foo < ActiveRecord::Base
has_many :bars
end
class Bar < ActiveRecord::Base
belongs_to :foo
scope :blue, where(color: 'blue')
end
のインスタンスがある場合、関連付けられているFoo
すべてのブルー モデルを取得する方法はいくつかあります。私の質問は、特定の関係が既に読み込まれているBar
かどうかを判断することに関するものです。bars
foo
これにより、バーの完全なコレクションが既にメモリにロードされているかどうかに関係なく、データベース クエリが実行されます。
foo.bars.blue.all
bars
をロードしたクエリに が含まれていた場合、これはクエリを実行しませんfoo
。それらがロードされていない場合は、すべてをロードしてbars
から列挙します。
foo.bars.select { |b| b.color == 'blue' }
クエリを実行せずに、リレーションが読み込まれたかどうかを判断するにはどうすればよいですか?
foo.bars.some_method_to_determine_whether_or_not_they_are_in_memory_thanks
何か案は?
編集:
明確にするために、これは私が達成したい結果の一種です:
class Foo < ActiveRecord::Base
has_many :bars
def blue_bars
if bars_already_loaded?
# enumerate
else
# use the scope
end
end
def red_bars
...
end
...
end