是否可以在模块中定义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的新手。
答案 0 :(得分:106)
在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
答案 1 :(得分:4)
模块的included
方法可能就是您所需要的。
http://www.ruby-doc.org/core-2.1.2/Module.html#method-i-included
答案 2 :(得分:0)
您可以使用ActiveSupport :: Concern执行此操作(实际上没有它,但它更清晰,更首选)
require 'active_support/concern'
module MyModule
extend ActiveSupport::Concern
included do
# relations, callbacks, validations, scopes and others...
end
# instance methods
module ClassMethods
# class methods
end
end