[Ruby On Rails]Rails中的ActiveSupport::Callbacks的使用

回调是在对象在运行的时候会自动关联的钩子,很典型的使用方法是在父类提供一组与其功能相关的一组回调,子类在可以增加一些功能在父类的方法上,而不需要重写父类的方法,这样也保护了父类的方法的整洁性,而不被破坏
一般我们在model中经常会使用 这种callbacks方法

如:before_save     after_save   before_destroy 等这样的都是,这样既不用 去重写 save destroy 方法,也能去改变或者实现一些功能
如果真的没有办法 非要去修改,建议也是 用 module 来规范作用域,然后去修改,不要污染其他的作用域
如: 
module A 
refine String do
def add2
self*2
end
end
       end
     module B
using A
"a".add2
end
    end
这样在使用的时候就不会污染全局了


那么 使用ActiveSupport::Callbacks 怎么来定义自己的 callback
class Record
  include ActiveSupport::Callbacks
  define_callbacks :save

  def save
    run_callbacks :save do
      puts "- save"
    end
  end
end

class PersonRecord < Record
  set_callback :save, :before, :saving_message
  def saving_message
    puts "saving..."
  end

  set_callback :save, :after do |object|
    puts "saved"
  end
end

person = PersonRecord.new
person.save

输出
   saving...
  - save
  saved

我们来看 首先我们需要做的一件事情是  父类的 Record 有一个 save 方法 ,我们 可能在子类中需要调用这个save方法,并且能不使用 打开类的方法重新save方法 来 给save方法增加一些功能
声明 define_callbacks :save
在调用save方法的时候 先检查它的 callback, run_callbacks :save
set_callback save方法回调执行的具体内容
如 after 是在 调用save方法之后 需要执行的内容
    before 是在调用之前需要执行的内容


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值