如何查找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
过滤它们。