7

Ho visto molti post su questo, ma nessuno sembra risolvere il mio problema. Ho un default_scope su un modello in questo modo:Rails 3.1.3 scope senza ambito

default_scope where(:is_active => true).order('LOWER(table.name)'); 

Ho altri (normali) gli ambiti, e voglio creare un ambito inactive utilizzando unscoped. Vorrei definirlo come un ambito, ma funziona solo se definita come metodo di classe:

# works 
def self.inactive 
    unscoped { where(:is_active => false) } 
end 

# none of these work 
scope :inactive, unscoped { where(:is_active => false) } 
scope :inactive, with_exclusive_scope { where(:is_active => true) } 
scope :inactive, unscoped.where(:is_active => false) 
scope :inactive, lambda { unscoped { where(:is_active => false) } } 
scope :inactive, unscoped { lambda { where(:is_active => false) } } 
unscoped do 
    scope :inactive, where(:is_active => false) 
end 

C'è un modo che ho perso, o devo usare un metodo di classe per definire questo ambito?

+0

Tipo di simile a http://stackoverflow.com/questions/6919307/rails-3-default-scope-scope-with-overrride –

+0

(se leggi i commenti lì, non c'è davvero una soluzione) –

+0

Direi anche guardare in 'except' e' only' ma non sembrano negare 'default_scope' da un altro scope, simile al problema con' unscoped' e 'with_exclusive_scope'. –

risposta

6

Non sembra essere un modo per farlo. Ho aperto un problema sul repository delle rotaie su github ...

+2

Come un aggiramento, è possibile creare un metodo di classe che utilizza unscop e che funziona correttamente. –

+1

Per riferimento: https://github.com/rails/rails/temi/4306 –

0

Prova questa

scope :inactive, lambda { unscoped.where(:is_active => false) } 
+0

non funziona – sethvargo

+1

ma non lo aggiungo alla mia lista di possibilità non tentate – sethvargo

+0

ftr, né non esce {lambda {...}} – sethvargo

Problemi correlati