我有两个模块添加到对象的默认范围。
module Testable
extend ActiveSupport::Concern
included do
default_scope { where(test_only: false) }
end
end
module ActiveScoped
extend ActiveSupport::Concern
included do
default_scope { where(active: true) }
end
end
当我在模型类中包含这两个模块时,查询在where
中都包含这两个子句。这两者都必须是默认范围的原因是因为有更多的地方必须应用这些范围而不是。此外,忘记在这些地方之一中应用示波器的成本很高。因此,在几个地方明确指定它不适用似乎是一个更好的选择。但是,我现在需要编写一个方法,可以从模型中获取所有对象,只应用其中一个范围。我怎么能这样做?
非常感谢任何帮助。
答案 0 :(得分:2)
我不喜欢在模块中定义default_scope
然后包含它的想法。这对于模型本身来说听起来更自然。
但是,您仍然可以使用unscoped
删除这些默认范围。
Foo.all
# Returns relation object with current two default scopes
Foo.unscoped
# Returns all results without any scope
Foo.unscoped do
where(active: true)
end
# Returns object with only one scope applied