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以及何时设置为空数组。