2008-10-09 12 views
12

He named_scope que se reutiliza en múltiples modelos de ActiveRecord. Por ejemplo:Cómo extraer common named_scopes de los modelos ActiveRecord

named_scope :limit, lambda {|limit| {:limit => limit}}  

¿Cuál es la mejor práctica para extraer el código para ser compartidos a través de modelos. ¿Es posible extraerlo a un módulo o debería volver a abrir ActiveRecord :: Base class?

Respuesta

21

Use un módulo. Algo como esto debería funcionar:

module CommonScopes 
    def self.included(base) 
    base.class_eval do 
     named_scope :limit, lambda {|limit| {:limit => limit}} 
    end 
    end 
end 

Luego solo incluye CommonScopes y estarás listo para continuar.

+1

Esto parece funcionar para el nivel de clase, pero no el nivel de instancia. Por ejemplo: 'User.limit (1)' funciona, pero la segunda llamada a limitar aquí genera un error: 'users = User.limit (5); users.limit (1) '. ¿Alguna solución para el nivel de instancia? –

Cuestiones relacionadas