Можно ли определить обратный вызов "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.
Ответы
Ответ 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
Ответ 2
Метод included
может быть тем, что вам нужно.
http://www.ruby-doc.org/core-2.1.2/Module.html#method-i-included