3

从概念上讲,我有 2 个模型,一个具有默认范围

class Model
  default_scope where: "is_acitve = 1"
end

class SpecialUser
   has_many :model

   ## 1
   def model
     Model.unscoped { super }
   end
end

我试图有几个选择的地方覆盖模型的默认范围 - 模型的许多其他用户存在,他们都应该只看到活动模型的。只有少数特殊情况可以访问不活动的情况。

使用方法#1,我可以处理这种情况

s = SpecialUser.find_by_id x
s.model  # <-- works for even is_active =0 cases.

但是,如果我尝试如下(为了性能):

s = SpecialUser.includes(:model).where("id = 5")

默认范围被注入到查询中。

即使使用包含任何方法来避免默认范围?

4

1 回答 1

0

你想要的是unscoped,它将在查询时删除 default_scope :

s = SpecialUser.unscoped.includes(:model).where("id = 5")
于 2013-08-22T00:04:59.473 回答