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

来源:互联网 发布:iphone 同步软件 编辑:程序博客网 时间:2024/05/29 08:30
回调是在对象在运行的时候会自动关联的钩子,很典型的使用方法是在父类提供一组与其功能相关的一组回调,子类在可以增加一些功能在父类的方法上,而不需要重写父类的方法,这样也保护了父类的方法的整洁性,而不被破坏
一般我们在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  endendclass PersonRecord < Record  set_callback :save, :before, :saving_message  def saving_message    puts "saving..."  end  set_callback :save, :after do |object|    puts "saved"  endendperson = PersonRecord.newperson.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
原创粉丝点击