ActiveRecord Models - добавление пользовательских методов - PullRequest
0 голосов
/ 12 июня 2009

У меня есть 10 моделей, и 3 из них нуждаются в дополнительных пользовательских методах:

has_staged_version?
apply_staged_version
discard_staged_version

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

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

Приветствия

Ответы [ 3 ]

4 голосов
/ 12 июня 2009

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

См. 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 голос
/ 12 июня 2009

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

module StagedVersionMethods
  def has_staged_version?
  end

  def apply_staged_version
  end

  def discard_staged_version
  end
end

Model.send :include, StagedVersionMethods
0 голосов
/ 12 июня 2009

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

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