2

Rails のドキュメントhttp://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.htmlから:

Post.includes([:author, :comments]).where(['comments.approved = ?', true]).all

このような条件を使用すると、意図しない結果が生じる可能性があることに注意してください。上記の例では、承認されたコメントのない投稿はまったく返されません。これは、条件が関連付けだけでなく SQL ステートメント全体に適用されるためです。

では、この例で承認されたコメントのない投稿を含むすべての投稿を返すにはどうすればよいでしょうか?

私はSQLでそれを行うことができます:

SELECT posts.* from posts LEFT JOIN comments ON (comments.post_id = posts.id AND comments.approved = true);

ただし、これは rails の joins メソッドでは機能しません。これは、Post.comments への次のアクセスで、すべてのコメントが承認され、承認されていないという SQL 要求が発生するためです。

どんな手掛かり ?どうも

レール 3.2.8

4

0 に答える 0