每当 Activerecord 的 :after_save 回调触发时触发回调

Triggering a callback whenever Activerecord's :after_save callbacks trigger

我有以下代码,我想在 ActiveRecord 的 on_new_annoucement 触发时触发 FooClass 的回调。我已将回调数组设为模块的 class 变量,但它超出了 Activerecord 的回调范围。

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

使用这种方法,您的代码只会随着时间的推移变得更加混乱。

考虑使用 Wisper Gem。它实现了事件侦听器模式并帮助您维护干净的代码。