私は次のような2つのモデルを持っています:
class Country < ActiveRecord::Base
has_many :cities
end
class City < ActiveRecord::Base
belongs_to :country
scope :big, where("population > 1000000")
end
次に、コードで国と都市をロードします。次のようにします。
country = Country.include(:cities).find(id)
しかし、私が実行すると:
country.cities.big
次のクエリでデータベースにヒットします。
SELECT * FROM cities where country_id = 1 AND population > 1000000
これは問題なく動作しますが、:include. アソシエーションが既にロードされている場合、スコープがデータベースにヒットしないように指示する方法はありますか?
アソシエーション拡張機能を使用して実行できますが、通常のスコープでは実行できません。拡張機能では、次のようなことを行います:
has_many :cities do
def big
if loaded?
detect {|city| city.population > 1000000}
else
where("population > 1000000")
end
end
end
しかし、これは 2 つの場所でスコープを繰り返すことになり、都市モデルでスコープを再利用したいと考えています。