
[code]

    ModelA
      - id
      - c_id
      - d_id
    
    ModelB
      - id
      - name
      - c_id
      - d_id
    
[/code]

`ModelA` と `ModelB` の共有のカラムは `c_id` と `d_id` です。

[code]

    SELECT 
      A.id, B.name
    FROM
      ModelA AS A
      LEFT JOIN ModelB AS B
        ON A.c_id = B.c_id AND A.d_id = B.d_id
    
[/code]

Rails(ActiveRecord)でこのようなデータ取得はどうしたらいいでしょうか。


CC BY-SA 3.0
2018-01-17T11:12:52.477
41037
2018-01-20T11:13:39.133
24522
question
ruby-on-rails mysql sql rails-activerecord
Railsで複数条件のLEFT JOINをかくには


`joins` を使って以下のように書きます。

[code]

    ModelA.joins(%{
      LEFT JOIN model_bs
      ON model_a.c_id = model_b.c_id AND model_a.d_id = model_b.d_id
    }).select("*, model_b.name AS b_name").map { |a| a.b_name }
    
[/code]

ここで `model_a`, `model_b` はテーブル名です。得られるレコードは ModelA のインスタンスですが、`name` は特異メソッド
`name` を経由して得ることが出来ます。

ON句で複合キーを指定した場合、SQL (の一部) を直接書く以外に方法は無いです。多分。


CC BY-SA 3.0
2018-01-20T11:13:39.133
41110
2018-01-20T11:13:39.133
76
41037
answer