在Rails模型中,您可以为对象生命周期内发生的事件添加各种之前/之后的回调。 save
,update
,create
等
我很好奇,是否有一个API可以指定自定义生命周期事件并以与标准事件相同的方式使用回调。
基本上,我很好奇如何添加对以下内容的支持:
class Account < ApplicationRecord
set_callback(:cancel, :after) { incinerate_later }
end
其中cancel
是该自定义事件。
UPD:我相信答案是ActiveRecord::Callbacks
,尤其是ClassMethods.define_callback
。
来自ActionMailbox
的示例:
require "active_support/callbacks"
module ActionMailbox
# Defines the callbacks related to processing.
module Callbacks
extend ActiveSupport::Concern
include ActiveSupport::Callbacks
TERMINATOR = ->(mailbox, chain) do
chain.call
mailbox.finished_processing?
end
included do
define_callbacks :process, terminator: TERMINATOR, skip_after_callbacks_if_terminated: true
end
class_methods do
def before_processing(*methods, &block)
set_callback(:process, :before, *methods, &block)
end
def after_processing(*methods, &block)
set_callback(:process, :after, *methods, &block)
end
def around_processing(*methods, &block)
set_callback(:process, :around, *methods, &block)
end
end
end
end