rails rails可以过滤给定字段的关联类的数量

我正在使用Rails 3和Mongoid。

我有一个Folder类,然后可以与其他User类共享

class Folder has_one :owner has_many :users 

我正在尝试创建两个范围,一个可用于返回所有私人文件夹,另一个用于返回所有共享文件夹。 有没有办法计算范围内的关联数?

  scope :personal, where(:users.count => 0) #Erroring on count... scope :shared, where(:users.count.gt => 0) #Erroring on count... 

我已经考虑过构建方法,但我更喜欢使用范围,因为我希望将它们与其他范围链接起来。

由于您正在访问引用的文档 – 您的users方法是一个虚拟属性,在查询期间无法访问该属性。 但是,您可以使用user_ids (“ Folder文档中的“ User ID”数组)来执行所需的各种查询:

这些中的任何一个都适用于您的个人范围:

 scope :personal, where(:user_ids.size => 0) # or scope :personal, where(:user_ids => []) 

对于您的共享范围:

 scope :shared, where(:user_ids.ne => []) 
 scope :personal, where({ "$or" => [{:user_ids => nil}, {:user_ids => {"$size"=>0}}] }) scope :shared, where({ "$nor" => [{:user_ids => nil}, {:user_ids => {"$size"=>0}}] }) 

这应该处理以下情况:user_ids未设置或为null以及何时设置为空数组。