2012-04-01 14 views
13

que tienen un modelo de usuario que tiene la siguiente default_scope:Cómo omitir default_scope?

default_scope where(account_id: Account.current_account.id)

Si llamo User.all siempre me dan un resultado basado en la cuenta corriente.

En algunos casos, por motivos administrativos, me gustaría omitir ese alcance y ver a todos los usuarios en el sistema independientemente de la cuenta.

¿Hay alguna manera de hacerlo?

Respuesta

20

Sí, con unscoped.

User.unscoped.all 
+0

Perfecto, gracias! – Nathan

+2

_Advertencia: _ revise las advertencias en [esta respuesta] (http://stackoverflow.com/a/4166950/2859525) sobre el uso de 'unscoped' para resolver este problema. – Todd

+0

Esta no es una gran respuesta, acabamos de experimentar una situación en la que 'unscoped' arruinó totalmente nuestros conjuntos de resultados en las pruebas. –

0

En estos días, el enfoque correcto es utilizar unscope, que sólo se eliminará una parte explícita del alcance. Por ejemplo:

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

Esto importa cuando se componen varios ámbitos.

Por supuesto, la aplicación de ese tipo de ámbito predeterminado en primer lugar es un anti-patrón en sí mismo.