ActiveSupport::Callbacks 提供了一个独立于rails 的回调功能
所谓的回调 :就是在执行一个方法的时候,自动的回调执行另一个对象,为什么说是对象,而不是说方法
因为 自动回调的不仅仅 是 方法,也可以是 代码块
那么如何使用 ActiveSupport::Callbacks 来创建回调呢?
1 require "active_support/all"
2 class Mod
3 include ActiveSupport::Callbacks
4 define_callbacks :update
5 set_callback :update, :before, :update_message
6
7 def update_message
8 puts "我是在update方法之前调用"
9 end
10
11 def update
12 run_callbacks :update do
13 puts "开始执行update本身的逻辑"
14 end
15 end
16
17 set_callback :update, :after do
18 puts "我是在Update方法逻辑结束之后调用"
19 end
20
21 end
22
23
24 Mod.new.update
=>结果:
我是在update方法之前调用
开始执行update本身的逻辑
我是在Update方法逻辑结束之后调用
首先引入 active_support 库 或者说 active_support的gem
代码中: 意图是在执行 update 方法之前 来执行 一个对象(可以是方法,也可以是代码块),总之需要执行另一个逻辑
在结束 update 方法后执行另一个逻辑
首先看 define_callbacks
他的作用 是用来 声明 一个 需要执行 回调的方法(这里声明的回调方法是 update)
在 update 方法中 ,run_callbacks :update 是用来执行回调方法
而需要回调的对象创建 使用的是: set_callback
set_callback 有三个参数,第一个参数表示的需要回调的方法(这里是update),回调执行的时间(before,after)之前、之后等
第三个参数执行的 对象
所以上面的代码很好 理解就是 ,我定义了一个 update 方法,需要在调用update 方法之前 回调 update_message 方法,update方法结束后回调一个代码块
然后得出了结果