ActiveRecord查询包括避免关系的默认范围

时间:2013-08-21 18:38:03

标签: ruby-on-rails activerecord

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

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")

将默认范围注入查询。

即使使用包含,也可以避免默认范围?

1 个答案:

答案 0 :(得分:0)

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

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