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

Dou*_*ish 2 scope ruby-on-rails mongodb mongoid

我正在使用Rails 3和Mongoid.

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

class Folder
  has_one :owner
  has_many :users
Run Code Online (Sandbox Code Playgroud)

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

  scope :personal, where(:users.count => 0)    #Erroring on count...
  scope :shared, where(:users.count.gt => 0)  #Erroring on count...
Run Code Online (Sandbox Code Playgroud)

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

the*_*RON 7

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

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

scope :personal, where(:user_ids.size => 0)
# or
scope :personal, where(:user_ids => [])
Run Code Online (Sandbox Code Playgroud)

对于您的共享范围:

scope :shared, where(:user_ids.ne => [])
Run Code Online (Sandbox Code Playgroud)