Подтвердить что ты не робот

Можно ли определить обратный вызов "before_save" в модуле?

Можно ли определить обратный вызов before_save в модуле? Так что с классом вроде этого:

class Model
  include MongoMapper::Document
  include MyModule
end

и модуль, подобный этому:

module MyModule
  before_save :do_something

  def do_something
    #do whatever
  end  
end 

do_something будет вызван до того, как будут сохранены объекты Model? Я пробовал это так, но получаю undefined method 'before_save' for MyModule:Module.

Извините, если это что-то простое - я новичок в Ruby и Rails.

4b9b3361

Ответ 1

В Ruby on Rails < 3 (без функций Rails, только Ruby)

module MyModule
  def self.included(base)
    base.class_eval do
      before_save :do_something
    end
  end

  def do_something
    #do whatever
  end
end

В Ruby on Rails >= 3 (с функцией Rails Concern)

module MyModule
  extend ActiveSupport::Concern

  included do
    before_save :do_something
  end

  def do_something
    #do whatever
  end
end