railsでのeager_loadの結合条件の追加はできますか?
現在、railsを利用し、Facebookのような投稿に対しユーザーが「いいね」を押すようなWEBアプリを作成しています。
テーブルとmodelは以下の3つで構成しています。
- Post id[PK], user_id, text
- User id[PK], name
- Good id[PK], post_id, user_id
POSTの一覧ページにて、自分が「いいね」を押しているか判るようにしたいので、
以下のようなSQLをクエリで発行したいのですが
SELECT * FROM posts LEFT OUTER JOIN goods
ON goods.post_id = posts.id AND goods.user_id = 3
現状の実装の
@posts = Post.eager_load(:goods).where(goods: {user_id: 3})
では、
SELECT * FROM
posts
LEFT OUTER JOINgoods
ONgoods
.post_id
=posts
.id
WHEREgoods
.user_id
= 3
となってしまい、思ったとおりのクエリが発行できません。
@posts = Post.joins("LEFT OUTER JOIN goods ON posts.id = goods.post_id AND goods.user_id = 3")
とすれば、発行自体は出来るのですが、今度はキャッシュが聞かない為、viewでクエリが別途発行され、あまり良い方法ではないなと感じています。
eager_loadにjoinsのような条件を渡せれば良いのですが、そういった方法はありませんか?
また、relationの張り方を工夫すれば問題ないなどという事であればご教示お願いします。
よろしくお願いします。