現在、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 JOIN goods ON goods.post_id = posts.id
WHERE goods.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の張り方を工夫すれば問題ないなどという事であればご教示お願いします。

よろしくお願いします。