Есть ли что-то похожее на application_helper или application_controller для моделей? - PullRequest
4 голосов
/ 07 января 2012

У меня есть некоторые функции, которые я использую в каждой отдельной модели, и я хотел бы поместить их в что-то вроде ActiveRecord::Base, поэтому мне не придется называть одни и те же функции во всех моих моделях ,

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

Ответы [ 2 ]

3 голосов
/ 07 января 2012

Напишите модуль, который содержит необходимые методы и include MyModule при необходимости.

Вы, безусловно, можете сделать, как предложил @derekerdmann, и создать абстрактный базовый класс для своих моделей:

class MyBaseModel < ActiveRecord::Base
  abstract_class = true

  def my_method(*args)
    #code goes here
  end
end

class MyModel < MyBaseModel

end

Только не забудьте, что предполагается abstract_class = true строка или наследование одной таблицы.

Лично я предпочитаю методологию mixin, потому что если ваши модели когда-либо расходятся в общей функциональности, вы можете сгруппировать общие функции в отдельные модули и include их по мере необходимости.

2 голосов
/ 07 января 2012

Помните, что вы все еще можете использовать стандартные объектно-ориентированные практики в Rails.Создайте класс, который расширяет ActiveRecord::Base со всеми вашими общими функциями, а затем расширяйте этот класс для каждой из ваших реальных моделей ActiveRecord.

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