1

我有兩個模塊添加到對象的默認範圍。在Rails中覆蓋多個默認範圍中的一個

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這兩個條款。這兩者都必須是默認範圍的原因是因爲還有更多的地方需要應用這些範圍。此外,忘記將這個範圍應用於這些許多地方之一的成本很高。因此,在少數幾個不適用的地方明確指出,這似乎是一個更好的選擇。但是,現在我需要編寫一個方法,只需應用其中一個範圍,即可從模型中獲取所有對象。我怎樣才能做到這一點?

任何幫助將不勝感激。

回答

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