【问题标题】:How to set after callback for specific transition only in aasm?如何仅在aasm中为特定转换设置回调后?
【发布时间】:2015-07-15 17:47:09
【问题描述】:

我有 2 个活动:

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 

但它不起作用

【问题讨论】:

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

标签: ruby-on-rails ruby aasm


【解决方案1】:

我不确定我是否得到了你。你只想在这个转换之后运行event2transitions to: :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。您可以在aasm找到更多详细信息。

如果一个事件有多个转换,第一个 成功完成的转换将停止其他转换 处理相同的事件。

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

【讨论】:

    猜你喜欢
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-25
    • 2012-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多