如何查找has_many关联数为零的所有记录?

假设您有以下has_many关联的Question模型:(来自此插件的示例)

 has_many :comment_threads, :class_name => "Comment", :as => :commentable, :dependent => :destroy 

如何定义返回没有相关注释的问题的范围或类方法?

基本上我想要Question.unanswered返回所有问题,零评论。

我认为使用counter_cache方法更好更快,但你可以创建你想要的范围(如果我猜错了表或列名称,你可能需要一些调整):

 scope :unanswered, joins('LEFT OUTER JOIN comments ON comments.commentable_id = questions.id'). where('comments.id IS NULL') 

使用LEFT OUTER JOIN生成连接表,对于未注释的问题,所有注释表列都设置为NULL 。 这些正是我们需要的行,因此我们使用where过滤它们。