我有一个状态机,在 Rails 应用程序(带有 ActiveRecord)中,用AASM定义,它有很多回调。其中一些回调包含重复的代码。例如,在每次状态变化时,我们都需要建立和保存记录并发送邮件。
event :revision, after: :revision_event_callback do
# ...
end
event :basic_submit, after: :basic_submit_event_callback do
# ...
end
event :approve, after: :approve_event_callback do
# ...
end
def revision_event_callback
OrderStatusMailer.status_change_report(self, :revision)
state_changes.build(transition: :revision)
end
def basic_submit_event_callback
OrderStatusMailer.status_change_report(self, :basic_submit)
state_changes.build(transition: :basic_submit)
# ...
# basic_submit-specific events
end
def approve_event_callback
OrderStatusMailer.status_change_report(self, :approve)
state_changes.build(transition: :approve)
end
Intead,我想要一个通用回调,并且对于需要它的事件,还有一个特定的回调。
def event_callback(event_name)
OrderStatusMailer.status_change_report(self, event_name)
state_changes.build(transition: event_name)
end
def basic_submit_event_callback
# basic_submit-specific events
end
这可能吗?而且,非常重要的是:该代码如何访问被触发事件的名称?