2012-04-01 9 views
13

Mam modelu użytkownika, który ma następujące default_scope:Jak pominąć default_scope?

default_scope where(account_id: Account.current_account.id)

Jeśli zadzwonię User.all zawsze uzyskać wynik opiera się na rachunku bieżącym.

W niektórych przypadkach, w celach administracyjnych, chciałbym ominąć ten zakres i zobaczyć wszystkich użytkowników w systemie, niezależnie od konta.

Czy istnieje sposób, aby to zrobić?

Odpowiedz

20

Tak, z unscoped.

User.unscoped.all 
+0

Doskonale, dzięki! – Nathan

+2

_Ostrzeżenie: _ zapoznaj się z zastrzeżeniami w odpowiedziach [this answer] (http://stackoverflow.com/a/4166950/2859525) na temat używania 'unscoped' do rozwiązania tego problemu. – Todd

+0

To nie jest dobra odpowiedź, po prostu doświadczyliśmy sytuacji, w której 'unscoped' całkowicie zepsuł nasze wyniki w testach. –

0

Te dni, właściwe podejście do korzystania unscope, który będzie tylko usunąć wyraźną część zakresu. Np .:

class User < ActiveRecord::Base 
    default_scope where(account_id: Account.current_account.id) 
    scope :all_accounts, -> { unscope(:account_id) } 
end 

Ma to znaczenie przy komponowaniu wielu zakresów.

Oczywiście zastosowanie tego rodzaju domyślnego zakresu jest w pierwszym rzędzie anty-wzorem.