Вызов суперметодов в Ruby

Итак, я был рефакторинга мой код в моей маленькой Rails приложения в целях устранения дублирования, и в целом сделать мою жизнь легче (а я, как простой жизни). Часть реорганизации состоит в том, чтобы переместить код, общий для двух моих моделей для модуля, который я могу включать, где это нужно.

So far, So good. Похоже, что это будет работать, но я просто ударил проблема, что я не знаю, как его обойти. Модуль (который я назвал отправляемый), просто будет код, который обрабатывает Факс, e-mail, или печать PDF документа. Так, например, у меня есть заказ на покупку, и у меня есть Внутренние Заказы на продажу (названный так сокращенно-ISO).

проблема У меня поразило, это то, что я хочу, чтобы некоторые переменные инициализированы (инициализирован для людей, которые не произносят правильно :P ) после того, как объект загружен, поэтому я использую after_initialize крючок. Не проблема... пока я не начала добавив некоторые более mixins.

проблема у меня есть, заключается в том, что я могу after_initialize в одном из моих mixins, так что мне нужно включить супер вызов на старте, чтобы убедиться, что другие mixin after_initialize вызовы вызовут. Это здорово, пока я, наконец, вызов super и я получаю сообщение об ошибке, потому что нет супер позвонить.

Вот небольшой пример, в случае, если я не был достаточно запутанным:

class Iso < ActiveRecord::Base
  include Shared::TracksSerialNumberExtension
  include Shared::OrderLines
  extend  Shared::Filtered
  include Sendable::Model

  validates_presence_of   :customer
  validates_associated    :lines

  owned_by                :customer
  order_lines             :despatched # Mixin

  tracks_serial_numbers   :items  # Mixin

  sendable :customer                      # Mixin

  attr_accessor :address

  def initialize( params = nil )
    super
    self.created_at ||= Time.now.to_date
  end
end

Так вот, если каждый из mixins иметь after_initialize разговора с супер вызов, как я могу остановить, что в прошлом супер вызов от сигнала об ошибке? Как я могу проверить, что супер метод существует еще до того как я его называю?

Найдено 6 ответов:

Ruby mixins and calling super methods

http://stackoverflow.com/questions/10808/ruby-mixins-and-calling-super-methods

Посмотреть решение →