2009-06-12 4 views
0

У меня есть 10 моделей и 3 из них необходимы дополнительные специальные методы, которые происходят быть:ActiveRecord модели - добавление пользовательских методов

has_staged_version? 
apply_staged_version 
discard_staged_version 

Я хочу, чтобы определить эти методы один раз.

Я мог бы создать пользовательский подкласс ActiveRecord: Base, определить методы там и унаследовать от него мои 3 модели. Но есть ли способ «Ruby/Rails» для достижения этого?

Cheers

ответ

4

Используйте модуль в качестве микса.

См http://www.juixe.com/techknow/index.php/2006/06/15/mixins-in-ruby/

например,

в /lib имеют

module StagedVersionStuff 

    def has_staged_version? 

    end 

    def apply_staged_version 

    end 

    def discard_staged_version 

    end 
end 

, а затем в моделях, которые вы хотите, чтобы эти методы у вас есть

include StagedVersionStuff 

после Class декларации

1

Вы могли бы создать модуль и ваш классы включают в себя:

module StagedVersionMethods 
    def has_staged_version? 
    end 

    def apply_staged_version 
    end 

    def discard_staged_version 
    end 
end 

Model.send :include, StagedVersionMethods 
+0

Огромное спасибо - это то, чем я был после. – Paul

0

Что делают ваши занятия? Выбор того, следует ли использовать подкласс или модуль, - скорее вопрос семантики на основе того, что сами классы - это.

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