来自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的连接方法,因为下次访问Post.com将触发SQL请求,该请求将使所有注释得到批准而不会被批准。
有任何线索吗? THX
Rails 3.2.8