2008-10-09 17 views
12

Mam named_scope, który jest ponownie używany w wielu modelach ActiveRecord. Na przykład:Jak wyodrębnić wspólne named_scopes z modeli ActiveRecord

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

Jaka jest najlepsza praktyka wyodrębnić ten kod może zostać rozdzielona między modelami. Czy jest możliwe wyodrębnienie go do modułu lub powinienem ponownie otworzyć klasę ActiveRecord :: Base?

Odpowiedz

21

Użyj modułu. Coś w tym stylu powinno zadziałać:

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

Po prostu dołącz CommonScopes, a będziesz gotowy.

+1

to wydaje się działać na poziomie klasy, ale nie instancja poziomu. Na przykład: 'User.limit (1)' działa, ale drugie wywołanie limitu powoduje błąd: 'users = User.limit (5); users.limit (1) '. Jakieś rozwiązanie dla poziomu instancji? –