0

这是我的示例代码:

class Foo < ActiveRecord::Base
  include AASM
  aasm_column :status
  aasm_initial_state :start_state

  aasm_state :start_state
  aasm_state :state_two
  aasm_state :end_state

  aasm_event :move_to_two, :guard => :guard_callback, :after => :after_callback do
    transitions :from => :start_state, :to => :state_two
  end

  def guard_callback
    puts "executing guard callback..."
    false
  end

  def after_callback
    puts "executing after callback..."
  end

这是我的代码外观的玩具表示。我只是从警卫回调中返回 false 来测试不执行转换或之后的行为。这是我在测试中调用的代码

foo = Foo.new
foo.move_to_two!
puts "foo's current status: #{foo.status}"

这是输出

executing after callback...
foo's current status: state_two

请注意,守卫永远不会被召唤......

我把警卫放在错误的地方了吗?我误会返回 false 会停止过渡吗?停止转换是否也会导致 after 回调被忽略?还是无论如何都会执行 after ?

如果最后一件事是真的,我如何将状态传递给该回调?

提前谢谢,如果您需要更多信息,请告诉我...

京东

4

1 回答 1

3

好的,我想通了(整个“只要你问,你就会找到答案”的事情)...... :guard 自己进行转换:

aasm_event :move_to_two, :after => :after_callback do
  transitions :from => :start_state, :to => :state_two, :guard => :guard_callback
end
于 2011-10-27T12:07:00.300 回答