毎日温泉に入りたい♨︎

見た物や買った物、投資についてを書いてますヽ(* ॑꒳ ॑* )ノダァーッ!!

railsでLEFT JOIN

こんにちは、こんばんは、おはようございます(。っ・ω・)っダァーッ!!
JOINのやり方忘れていたせいで2,3時間無駄にしたorz

includes 関連するテーブルをまとめて取得する(n+1対策)
rails4はreferencesを付ける事でLEFT OUTER JOINになる
sqlのon句で指定するカラムがデフォだとidとかプライマリー項目になるため、指定があればmodelでそれぞれを記載しておくとon句で結合条件にしてくれる
class ItemHead

has_many :item_detail ',primary_key: 'gid'

class ItemDetail

belongs_to :item_head , primary_key: 'gid'

コントローラーとか

@items = ItemHead.includes(:item_detail).references(:item_detail).where(target_month: @ym)

問題はここからで結合した値は取得した値の中に配列として入ってしまうため回して指定してやる必要がある

@items.each do |data|
    logger.debug data.item_detail.item_size.inspect
end

結局処理結果加工するのクソめんどくさいn+1憎むべし
結局こんなでもいいかも

ItemHead.joins('LEFT JOIN ...').where(target_month: @ym).select('*').order(@sort)