目的
ActiveRecordで、(WHERE句でなく)ON句で絞り込んでからテーブルをJOINしたいが、ON句用のメソッドがない。
できるだけActiveRecordっぽく、綺麗に書きたい。
結論
テーブルをJOINする.join()
の直後に、.join("AND ...")
でON句は直書きする。
Sample.joins(:users) # usersテーブルをJOIN
.joins("AND users.type = #{User::USERTYPE_COOK}") # 調理師(ON句)
.where(users: {id: params[:user_id]} )
SELECT `samples`.*
FROM `samples`
INNER JOIN `users`
ON `users`.`id` = `samples`.`user_id`
AND users.type = "cook"
WHERE `users`.`id` = 1
;
備考
.merge()
を試したがダメだった。