2015-05-06 67 views
1

我有下面的代码,我想触发FooClass的回调,只要ActiveRecord的on_new_annoucement触发。我已经将回调数组作为模块的类变量,但它超出了Activerecord回调的范围。每当Activerecord触发一个回调:after_save回调触发器

module FooModule 
    class FooClass 
     attr_reader :callbacks 
     def initialize 
      @@callbacks = Hash.new { |h, k| h[k] = [] } 
     end 

     def on_new_announcement(&block) 
      @@callbacks[:on_new_announcement] << block 
     end 
    end 

    class Announcement < ActiveRecord::Base 
      after_save :on_new_announcement 
      def on_new_announcement 
       .... 
      end 
    end 
end 

回答

3

你的代码只会随着时间的推移而变得乱七八糟。

考虑使用Wisper Gem。它实现事件监听器模式,并帮助您保持干净的代码。