2008-10-09 5 views
12

У меня есть named_scope, который повторно используется в нескольких моделях ActiveRecord. Например:Как извлечь общие named_scopes из моделей ActiveRecord

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

Что является лучшей практикой для извлечения этого кода для совместного использования по моделям. Можно ли извлечь его в модуль или лучше открыть ActiveRecord :: Base?

ответ

21

Используйте модуль. Что-то вроде этого должно работать:

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

Тогда просто включите CommonScopes, и вам будет хорошо идти.

+1

Это, кажется, работает на уровне класса, а не экземпляра уровня. Например: `User.limit (1)` работает, но второй вызов для ограничения здесь вызывает ошибку: `users = User.limit (5); users.limit (1) `. Любое решение для уровня экземпляра? – 2011-04-18 17:14:11

Смежные вопросы