0

3つのモデルlog(顧客に属します)がcustomerありprojectrails 3.2アプリ内にあります。customerprojecthavesales_idフィールドの両方。実行したいクエリは次のとおりです。

顧客の次のログを返します。1) sales_id が session[:user_id] と等しい顧客のログ、および 2) プロジェクトの sales_id が session[:user_id] と等しい顧客のログ

1) の Rails クエリは次のようになります。

Log.joins(:customer).where(:customers => {:sales_id => session[:user_id]})

2) の Rails クエリは次のようになります。

Log.joins(:customer => :projects).where(:projects => {:sales_id => session[:user_id})

上記のクエリを組み合わせるには、次のことを行うのが正しい方法ですか?

Log.joins([:customer, {:customer => :projects}]).where('customers.sales_id = id OR projects.sales_id = id', id: session[:user_id])

http://guides.rubyonrails.org/v3.2.13/active_record_querying.htmlの11.2.4 章では、興味深いクエリ ケースについて説明しています。上記のクエリはまだテストしていません。上記のユニオン クエリが本当に正しいかどうかを知りたいです。

4

1 に答える 1

1

Rails はユニオンをネイティブにサポートしていません。あなたの場合、ユニオンは必要ないと思います。左外部結合を使用するだけです。

Log.joins('left outer JOIN `customers` ON `customers`.`id` = `logs`.`customer_id`
left outer JOIN `projects` ON `projects`.`customer_id` = `customers`.`id`').where('customers.sales_id = :id OR projects.sales_id = :id', id: session[:user_id]).distinct
于 2013-08-15T03:28:22.337 に答える