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_duepaid 的特定转换。

由于您在单个转换中涵盖了两个流程,因此第一步是为此流程进行单独的转换并将回调附加到它。作为,

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 及其调用顺序以满足您的需求