1

我在 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_duego时做一些动作paid

任何的想法?

4

3 回答 3

3

一种方法是在两个单独的语句中定义转换:

event :pay do
  transitions from: :pending, to: :paid
  transitions from: :past_due, to: :paid, after: :do_your_custom_action
end

在 docs 中查看有关回调的更多信息。

于 2017-02-22T10:07:22.547 回答
0

您可以将after回调附加到转换和事件。

由于两个转换的事件相同,因此您应该将回调附加到从 to 的特定past_due转换paid

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

transitions :from => :past_due, :to => :paid, :after => your_required_action
于 2017-02-22T12:03:17.017 回答
0

就个人而言,我将一个块传递给after回调

event :pay do
  after do
    # do_something
  end
  transitions from: [:pending, :past_due], to: :paid
end

这样我保证do_something将在event :pay完成后执行。

另一种方法是将回调附加到 a transitions,回调将在转换完成后执行。

请查看文档并阅读有关回调及其调用顺序以满足您的需求的信息

于 2017-02-22T14:27:46.070 回答