如何在命名范围内同时使用include
和join
?
帖子是多态的
class Post
has_many :approved_comments, :class_name => 'Comment'
end
class Comment
belongs_to :post
end
Comment.find(:all, :joins => :post, :conditions =>
["post.approved = ? ", true], :include => :post)
这不起作用,因为joins
执行内连接,include
执行左连接。
数据库引发错误,因为两个连接不能存在于同一查询中。
答案 0 :(得分:0)
您是否尝试过简单地省略ActiveRecord调用的:joins
部分?在has_many
关联的测试用例中,如果您的条件引用包含的表名,:include
将使用连接。例如,
Comment.all :include => :post
将总共运行两个查询:一个用于评论,一个用于他们的帖子。 Rails团队表示这是更好的表现。但是,如果Rails检测到您的条件需要加入,
Comment.all :include => :post, :conditions => ['post.approved = ?', true]
将运行一个查询,因为您需要它。
ActiveRecord不是那么聪明吗?
答案 1 :(得分:0)
如果您想通过他们的评论获得所有已批准的帖子,您可以执行以下操作:
Post.find(:all, :include => "comments", :conditions => ['approved = ?', true])
这将为您提供包含所有评论的所有已批准的帖子。 您不应该使用join,因为它会导致数据集过于庞大(每个与之相关的注释都会包含产品列)。