在Rails控制台中查询时如何跳过default_scope
例如
class User < ActiveRecord::Base
default_scope do
where("type != 'guest'")
end
end
查询与关联类似
例如
p = Product.last
p.users.where("...")
我需要为用户跳过default_scope。我尝试了p.users.unscoped
,但是它获取了所有用户(不仅与产品相关联)
答案 0 :(得分:1)
请勿使用$.
。它会在后面咬你。
删除default_scope
范围的唯一方法是使用default_scope
,正如您现在所了解的,它会删除所有范围-不仅是unscoped
。
所以default_scope
。
您可以这样做:
p.users.unscoped == User.all.unscoped
那不允许您急于加载/包含关联以避免N + 1个查询。
您应该使用显式作用域代替User.unscoped.where(product: p)
:
default_scope
除非您将其用于单表继承(STI),否则还应避免使用列名class User < ApplicationRecord
scope :not_guest, ->{ where.not(type: 'guest') }
end
。 ActiveRecord在某些情况下会使用它来确定记录的类别,并可能导致意外的错误。