是否可以在模块中定义'before_save'回调?

Rus*_*ell 61 ruby ruby-on-rails

是否可以before_save在模块中定义回调?这样的类是这样的:

class Model
  include MongoMapper::Document
  include MyModule
end
Run Code Online (Sandbox Code Playgroud)

和这样的模块:

module MyModule
  before_save :do_something

  def do_something
    #do whatever
  end  
end 
Run Code Online (Sandbox Code Playgroud)

do_something将在Model保存任何对象之前调用?我试过这样但是得到了undefined method 'before_save' for MyModule:Module.

抱歉,如果这很简单 - 我是Ruby和Rails的新手.

Sim*_*tti 111

在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
Run Code Online (Sandbox Code Playgroud)

在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
Run Code Online (Sandbox Code Playgroud)