Rails AASM;如果发生特定转换,如何执行某些操作
Rails AASM; How to do some action if the specific transition is occured
我在 rails 上使用名为 AASM 的状态机 gem。
有一个事件有两种类型的转换。
三种三种状态
state pending
state past_due
state paid
pending
可以改成paid
past_due
可以改成paid
event :pay do
transitions from: [:pending, :past_due], to: :paid
end
所以在这里,只有当 past_due
变为 paid
时,我才愿意采取一些行动。
有什么想法吗?
一种方法是在两个单独的语句中定义转换:
event :pay do
transitions from: :pending, to: :paid
transitions from: :past_due, to: :paid, after: :do_your_custom_action
end
查看有关回调的更多信息in the docs。
您可以将 after
回调附加到转换和事件。
由于两个转换的事件相同,您应该将回调附加到从 past_due
到 paid
的特定转换。
由于您在单个转换中涵盖了两个流程,因此第一步是为此流程进行单独的转换并将回调附加到它。作为,
transitions :from => :past_due, :to => :paid, :after => your_required_action
就我个人而言,我将一个块传递给 after
回调
event :pay do
after do
# do_something
end
transitions from: [:pending, :past_due], to: :paid
end
这样我确保 do_something
将在 event :pay
完成后执行。
另一种方法是将回调附加到 transitions
,其中回调将在转换完成后执行。
请查看文档和 read about callbacks 及其调用顺序以满足您的需求
我在 rails 上使用名为 AASM 的状态机 gem。
有一个事件有两种类型的转换。
三种三种状态
state pending
state past_due
state paid
pending
可以改成paid
past_due
可以改成paid
event :pay do
transitions from: [:pending, :past_due], to: :paid
end
所以在这里,只有当 past_due
变为 paid
时,我才愿意采取一些行动。
有什么想法吗?
一种方法是在两个单独的语句中定义转换:
event :pay do
transitions from: :pending, to: :paid
transitions from: :past_due, to: :paid, after: :do_your_custom_action
end
查看有关回调的更多信息in the docs。
您可以将 after
回调附加到转换和事件。
由于两个转换的事件相同,您应该将回调附加到从 past_due
到 paid
的特定转换。
由于您在单个转换中涵盖了两个流程,因此第一步是为此流程进行单独的转换并将回调附加到它。作为,
transitions :from => :past_due, :to => :paid, :after => your_required_action
就我个人而言,我将一个块传递给 after
回调
event :pay do
after do
# do_something
end
transitions from: [:pending, :past_due], to: :paid
end
这样我确保 do_something
将在 event :pay
完成后执行。
另一种方法是将回调附加到 transitions
,其中回调将在转换完成后执行。
请查看文档和 read about callbacks 及其调用顺序以满足您的需求