从概念上讲,我有两个模型,一个具有默认范围
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")
将默认范围注入查询。
即使使用包含,也可以避免默认范围?
答案 0 :(得分:0)
你想要的是unscoped,它将在查询时删除default_scope:
s = SpecialUser.unscoped.includes(:model).where("id = 5")