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