「users」と「lms_users」の2つのテーブルがあります
class LmsUser
belongs_to :user
end
class User
has_one :lms_user
end
私が書くとき、それは内部結合User.all(:joins => :lms_user)
でテーブルを結合します。
左結合が必要です。この動作をどのように変更できますか?(SQLコマンドは使用せず、Ruby構文のみを使用します。)
どうすればこれを処理できますか?
「users」と「lms_users」の2つのテーブルがあります
class LmsUser
belongs_to :user
end
class User
has_one :lms_user
end
私が書くとき、それは内部結合User.all(:joins => :lms_user)
でテーブルを結合します。
左結合が必要です。この動作をどのように変更できますか?(SQLコマンドは使用せず、Ruby構文のみを使用します。)
どうすればこれを処理できますか?
:joins => "LEFT JOIN lms_users ON lms_users.user_id = users.id"
を使用して、SQLなしでLEFT JOINを実行できますが、結合されたテーブルの列を含む追加の制約(または単に句)をincludes
指定した場合に限ります。order
それで、
User.includes(:lms_user).all
LEFT JOINは生成されません(代わりに2つの個別のクエリが生成されます)が、
User.includes(:lms_user).where(:lms_user => {:role => 'admin'}).all
だろう。
これについての詳細
User.left_outer_joins(:lms_user)
Rails5+を使用している場合