Ruby on rails 轨道原子吸收光谱法;如果发生特定转换,如何执行某些操作

Ruby on rails 轨道原子吸收光谱法;如果发生特定转换,如何执行某些操作,ruby-on-rails,aasm,Ruby On Rails,Aasm,我使用在rails上调用的状态机gem 有一个事件具有两种类型的转换 三种状态 state pending state past_due state paid pending可以更改为paid 过期可以更改为已付 event :pay do transitions from: [:pending, :past_due], to: :paid end 因此,只有当过期变成付费时,我才愿意采取一些行动 有什么想法吗?一种方法是在两个单独的语句中定义转换: event :pay

我使用在rails上调用的状态机gem

有一个事件具有两种类型的转换

三种状态

state pending
state past_due
state paid
pending
可以更改为
paid
过期
可以更改为
已付

  event :pay do
      transitions from: [:pending, :past_due], to: :paid
  end
因此,只有当
过期
变成
付费
时,我才愿意采取一些行动


有什么想法吗?

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

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

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

您可以将
后的
回调附加到转换和事件

由于两次转换的事件相同,您应该将回调附加到从
过期
付费
的特定转换

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

transitions :from => :past_due, :to => :paid, :after => your_required_action

就我个人而言,我在
回调之后将一个块传递给

event :pay do
  after do
    # do_something
  end
  transitions from: [:pending, :past_due], to: :paid
end
通过这种方式,我可以确保在
事件:pay
完成后执行
dou\u something

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

请看一下这些文件和它的通话顺序,以满足您的需求