Самым очевидным преимуществом является то, что вы можете взять общую функцию и поместить ее в одно место.Это всего лишь общее преимущество поддержания вашего кода организованным и модульным (без каламбура) - и вы, конечно, должны это делать
Использование методов Active Record не делает эти модули особенными в любом случае.
Наиболее очевидным недостатком является то, что ваш код, как написано, немного сложнее.Вы не можете использовать validates_presence_of
в модуле напрямую, потому что он не наследуется от ActiveRecord::Base
.(Предполагается, что Rails 3 облегчает выборочное расширение ваших собственных классов / модулей с помощью битов ActiveRecord-Functionality
Вместо этого вам нужно вызывать Active-Record-Methods в вашей моделикласс, когда ваша модель включена:
module FooHelper
def self.included(other)
other.send(:has_many, :foos)
end
end
Итак, главный недостаток в том, что ваш код становится немного сложнее для чтения.
Если вы просто разбиваете один класс на отдельные части и не нужно повторно использовать код где-то еще, вы можете использовать concerned_with
-шаблон , который работает при повторном открытии классов.
С другой стороны, есливам нужно больше функциональности, например параметры конфигурации вашего расширения, рассмотрите написание плагина