我使用的是Rails-4.2.6、state _Mach-1.2.0和Ruby-2.3,我已经在订单模型上定义了状态机。如下所示
state_machine :status, initial: :initiated do
after_transition on: :succeeded, do: :oderable_success_callback
event :pending do
transition initiated: :pending
end
event :failed do
transition [:initiated, :pending] => :failed
end
event :succeeded do
transition [:initiated, :pending] => :succeeded
end
end
def oderable_success_callback
orderable.successful_payment
end当我按如下方式更新顺序时,将触发after_transition回调。
order.succeeded
但是,当我更新订单时,它不会触发回调
order.update(status: 'succeeded')status被更新为“succeeded”,,但未能触发回调.
如何在普通after_transition上触发update回调。
发布于 2016-10-10 07:58:04
order.update将不会触发after_transition回调。如果您想要检测列上的更改。您可以使用模型的after_update回调。
class Order < ActiveRecord::Base
after_update :tasks
def tasks
if(self.status_changed? && status == 'succeeded')
oderable_success_callback
end
end
end发布于 2016-10-10 08:59:08
我根据状态进行了多次回调,并避免了多次if/else,如下所示,
after_update :orderable_callback
state_machine :status, initial: :initiated do
event :pending do
transition initiated: :pending
end
event :failed do
transition [:initiated, :pending] => :failed
end
event :succeeded do
transition [:initiated, :pending] => :succeeded
end
state :pending do
def orderable_callback
orderable.pending_payment
end
end
state :failed do
def orderable_callback
orderable.failed_payment
end
end
state :succeeded do
def orderable_callback
orderable.successful_payment
end
end
endhttps://stackoverflow.com/questions/39952847
复制相似问题