从 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