Ruby on rails 如何仅在aasm中为特定转换设置回调后?

Ruby on rails 如何仅在aasm中为特定转换设置回调后?,ruby-on-rails,ruby,aasm,Ruby On Rails,Ruby,Aasm,我有两项活动: event :event1, after: :event2! do transitions to: :state2, from: :state1, guard: proc {some func} transitions to: :state3, from: :state1 end event :event2 do transitions to: :state3, from: state2, guard: proc {some func} end 如何仅在e

我有两项活动:

event :event1, after: :event2! do
  transitions to: :state2, from: :state1, guard: proc {some func}
  transitions to: :state3, from: :state1
end    

event :event2 do
  transitions to: :state3, from: state2, guard: proc {some func}
end
如何仅在event1中为第一次转换设置回调后?(我不能代替第二次转换到其他事件)

我试过了

event :event1 do
  transitions to: :state2, from: :state1, after: :event2!, guard: proc {some func}
  transitions to: :state3, from: :state1
end 

但是它不起作用

我不确定我是否准确地找到了你。你只想在这个转换之后运行
event2
转换到::state2,from::state1,guard:proc{some func}
,对吗

event :event1 do
  transitions to: :state2, from: :state1, :after => Proc.new {|*args| set_process(*args) } , guard: proc {some func}
  transitions to: :state3, from: :state1
end 

def set_process(name)
  event2!
end
或者试试这个

event :event1 do
  transitions to: :state2, from: :state1, guard: proc {some func}
  transitions to: :state3, from: :state1
  after do
    event2! if self.state2?
  end
end    

event :event2 do
  transitions to: :state3, from: state2, guard: proc {some func}
end
这段代码意味着,当guard返回true时,它将执行第一次转换,否则它将执行第二次转换。转换后,如果是state2,它将执行event2。您可以在中找到更多详细信息

如果一个事件具有多个转换,则第一个 成功完成的转换将停止中的其他转换 正在处理的同一事件


您可以在回调中编写任何代码,就像rails回调一样。

我没有完全理解您的意思。在第一次转换之后,您需要做一些事情。你能解释一下吗?我想在event1之后自动运行event2,而不改变整个应用程序的代码。但仅适用于1个转换,不适用于所有。如果您在某个事件之后运行另一个事件,那么第一个事件有什么用?为什么不直接跳到第二个事件?事件2是否运行取决于警卫