7

He visto muchas publicaciones al respecto, pero ninguna parece resolver mi problema. Tengo un default_scope en un modelo de este modo:Rails 3.1.3 alcance sin ámbito

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

tengo otros ámbitos (normales), y quiero crear un ámbito inactive usando unscoped. Me gustaría definirlo como un ámbito, pero sólo funciona cuando se define como un método de clase:

# 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 

¿Hay alguna manera de que me perdí, o tengo que utilizar un método de clase para definir este ámbito?

+0

Algo similar a http://stackoverflow.com/questions/6919307/rails-3-decope-scope-scope-with-overrride –

+0

(si lees los comentarios allí, no hay realmente una solución) –

+0

Diría que también se debe buscar 'except' y' only', pero no parecen negar el 'default_scope' dentro de otro ámbito, similar al problema con' unscoped' y 'with_exclusive_scope'. –

Respuesta

6

No parece ser una manera de hacer esto. Abrí un problema en el repositorio de rieles en github ...

+2

Como solución temporal, puede crear un método de clase que use sin ámbito y que funcione bien. –

+1

Para referencia: https://github.com/rails/rails/issues/4306 –

0

probar este

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

no funciona bien, pero mal – sethvargo

+1

añadir a mi lista de posibilidades no probadas – sethvargo

+0

FTR, ni doesn sin ámbito lambda {{...}} – sethvargo

Cuestiones relacionadas