26

アクティビティ モデルがあり、ロケーションに所属しています

location.country = オーストラリアのすべてのアクティビティを選択するにはどうすればよいですか? (例えば)

範囲内でこれを行うことはできますか?

4

3 に答える 3

22

あなたが話している種類のクエリは結合です。コンソールで次のようなクエリを試すことができます。

Activity.joins(:locations).where('locations.country = "Australia"')

これは、SQL が次に関連付けられているすべてのアクティビティと場所を取得し、country=Australia の場所を見つけて、それらの場所に関連付けられているアクティビティを返すことを意味します。

これをより再利用可能なスコープにするために、国の変数を使用してモデルで定義します。

scope :in_country, lambda {|country| joins(:locations).where('locations.country = ?',country)}

詳細については、API ドキュメントを参照してください。

于 2013-01-02T02:37:07.377 に答える
3

はい、スコープを使用できます。次のようなものがアクティビティ モデルで動作するはずです。

scope :down_under, 
    joins(:locations).
    where("locations.country = 'Australia')
于 2013-01-02T02:27:40.467 に答える