Rails & ActiveRecord: добавление методов к моделям, которые наследуются от ActiveRecord :: Base - PullRequest
3 голосов
/ 31 марта 2012

У меня есть стандартная модель ActiveRecord со следующим:

class MyModel < ActiveRecord::Base
  custom_method :first_field, :second_field
end

В данный момент этот custom_method выбирается модулем, отправленным ActiveRecord :: Base.Функциональность в основном работает, но, конечно, она присоединяется к каждому классу модели, а не только к MyModel.Так что, если у меня MyModel и MyOtherModel в одном действии, предполагается, что MyOtherModel также имеет custom_method: first_field,: second_field.

Итак, мой вопрос: как мне прикрепить метод (например, def custom_method(* args)) до каждого класса, который наследуется от ActiveRecord :: Base, но не путем присоединения его к ActiveRecord :: Base непосредственно?

Любые идеи приветствуются.

===

Редактировать

В настоящее время метод custom_method присоединен к ActiveRecord :: Base следующим образом:

module MyCustomModule
  def self.included(base)
    base.extend(self)
  end

  def custom_method(*args)
    # Zippity doo dah - code goes here
  end
end

ActiveRecord::Base.send(:include, MyCustomModule)

1 Ответ

2 голосов
/ 31 марта 2012

Знаете ли вы о потомках?

ActiveRecord::Base.descendants

Вы должны обязательно прикоснуться к моделям, прежде чем звонить.

Смотрите отличную дискуссию здесь:

Есть ли способ получить коллекцию всех Моделей в вашем приложении Rails?

Я согласен с приведенными выше комментариями, что вы можете рассмотреть возможность добавления ваших методов к мета-классу или посреднику.класс или модуль mixin.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...