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 を返すと移行が停止すると誤解していますか? トランジションを停止すると、アフター コールバックも無視されますか? それとも、何があっても常に実行されますか?

この最後のことが真である場合、そのコールバックに状態を渡すにはどうすればよいでしょうか?

事前に感謝します。さらに情報が必要な場合はお知らせください...

jd

4

1 に答える 1

3

OK、私はそれを理解しました(「尋ねるとすぐに答えを見つける」ということ全体)... :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 に答える