いつもお世話になっております。
ActiveRecordを使った場合に以下のようなクエリはどのように記述するのが最適なのでしょうか。
sql
1SELECT 2 A.id, 3 A.name, 4 B_DASH.id as b_id, 5 B_DASH.name as b_name, 6 B_DASH.owner_id 7FROM 8 A 9LEFT OUTER JOIN 10 ( 11 SELECT 12 id, 13 name, 14 owner_id 15 FROM 16 B 17 WHERE 18 owner_id = '99999' -- owner_idの99999はsessionで保持しているID 19 ) B_DASH 20ON A.ID = B_DASH.A_ID 21WHERE 22 A.name LIKE '%hogehoge%'
ruby
1Class A < ApplicationRecord 2 has_many B 3end 4 5Class B < ApplicationRecord 6 belongs_to A 7end
以下の記事を参考にAのhas_manyにowner_idの絞込を付加することも考えたのですが、引数が渡せないため断念しました。
【Rails】結合先のテーブルで条件つけたいけど, 結合元のレコードは全部欲しいってときはScoped Association
sessionをモデルから参照することも考えたのですが、以下の記事では推奨されていないため、その方法も断念しました。
モデルの中でセッションを使う
また、Arel_tableを使っての処理は避けたいと考えています。
このような場合、どのように記述するのが最善になるのでしょうか?
A.left_join(B_DASH)のような記述ができればいいのですが、そういった記述はサポートされていないようですし、クエリをゴリゴリ書くしかないのかと、半分諦めているところです。。
皆様、お忙しいところ大変恐縮ですが、ご教示いただけると助かります。