以下のgistが超わかりやすかった。リンク先のコメント欄にはMongoid 5.0.1の場合も追記されている。
https://gist.github.com/jingoro/3015664#gistcomment-1629159
| require 'rubygems' | |
| require 'bundler/setup' | |
| require 'mongoid' | |
| Mongoid.configure do |config| | |
| config.master = Mongo::Connection.new('localhost', 27017, :logger => nil).db('mongoid-test') | |
| end | |
| class A | |
| include Mongoid::Document | |
| field :a | |
| before_save { p 'before_save' } | |
| before_update { p 'before_update' } | |
| before_create { p 'before_create' } | |
| after_save { p 'after_save' } | |
| after_update { p 'after_update' } | |
| after_create { p 'after_create' } | |
| around_save { |&b| p 'start around_save'; b.call; p 'end around_save' } | |
| around_create { |&b| p 'start around_create'; b.call; p 'end around_create' } | |
| around_update { |&b| p 'start around_update'; b.call; p 'end around_update' } | |
| end | |
| a = A.new | |
| a.save | |
| #=> "before_save" | |
| #=> "start around_save" | |
| #=> "before_create" | |
| #=> "start around_create" | |
| #=> "end around_create" | |
| #=> "after_create" | |
| #=> "end around_save" | |
| #=> "after_save" | |
| a.a = 1 | |
| a.save | |
| #=> "before_save" | |
| #=> "start around_save" | |
| #=> "before_update" | |
| #=> "start around_update" | |
| #=> "end around_update" | |
| #=> "after_update" | |
| #=> "end around_save" | |
| #=> "after_save" |
