我在一个项目上工作,并且我在一个我不知道的范围内使用。 我有这两个定义:
Class Mymodel
scope :active, where({ active: true })
Class SecondModel
has_many :mymodel
然后我用它们像:
instance_var = SecondModel.new
instance_var.mymodels.active
这件事确实有效,我的问题是它是否是一种很好的方式 它是如何工作的,因为范围与类方法等效? 我使用mongoid作为数据库部分。
答案 0 :(得分:1)
它起作用因为
instance_var.mymodels
可以是Mongoid::Criteria
个实例。
因此它可以接受Mymodel
的所有范围。
现在ActiveRecord
中范围和类方法之间的实际区别(据我记得Mongoid
也是如此),范围必须返回一个关系。
使用关系和范围没有问题,实际上它是非常合乎逻辑的,这是我们通常使用它们的方式。