アクティビティモデルがあり、それらはLocation_toに属しています
Location.country = Australiaのすべてのアクティビティを選択するにはどうすればよいですか? (例えば)
これをスコープ内で実行できますか?
あなたが話している種類のクエリは結合です。次のようなコンソールで、このようなクエリを試すことができます。
Activity.joins(:locations).where('locations.country = "Australia"')
つまり、SQLはそれに関連付けられているすべてのアクティビティと場所を取得し、country = Australiaである場所を見つけて、それらの場所に関連付けられているアクティビティを返します。
これをより再利用可能なスコープにするには、国の変数を使用してモデルに定義します。
scope :in_country, lambda {|country| joins(:locations).where('locations.country = ?',country)}
API docs でこれについて詳しく学ぶことができます。
最新のRailsバージョンでできること:
_Activity.joins(:location).where(locations: { country: "Australia" })
_
注意してください:
joins(:location)
の場所(singular)です。これはbelongs_to関係だからですwhere(…)
内の場所(plural)です。これはテーブル名なので後者は、次の場合に意味します。
_belongs_to :location, class_name: "PublicLocation"
_
クエリは次のようになります。
_ Activity.joins(:location).where(public_locations: { country: "Australia" })
_
はい、スコープを使用できます。このようなものがアクティビティモデルで機能するはずです。
scope :down_under,
joins(:locations).
where("locations.country = 'Australia')