4

現在のプロジェクトでAASMを使用してステート マシンを作成していますが、イベントを自動的に呼び出して次のステートに進むにはどうすればよいでしょうか?

私はこれを行う2つの方法を検討しています:

  1. 特定の条件が満たされているかどうかを定期的に確認するバックグラウンド ジョブをセットアップします。そのため、イベントを呼び出して次の状態に進みます。

  2. before_save次のイベントを連続して試行するメソッドを呼び出します。ガードがあると、条件が満たされた場合は成功しません。それ以外の場合は状態が変化し、次にモデルが更新されたときに新しいイベントをチェックします。

イベントを移行するためだけに background_job キューを設定するのはやり過ぎのように思えるため、2 番目のオプションに傾いていました。これに関するベスト プラクティスが見つからなかったので、ベスト アプローチとその理由を教えてください。

たとえばstart_onboarding、イベントがありcomplete_onboardingます。これらのイベントを手動で呼び出したくはありませんが、保留中 -> in_progress -> 完了イベントの間で自動的に移行したいと考えています。

  enum status: {
    pending: 1,
    in_progress: 2,
    completed: 3
  }

  aasm column: :status, enum: true, whiny_transitions: false do
    state :pending, initial: true
    state :in_progress
    state :completed

    event :start_onboarding do
      transitions from: :pending, to: :in_progress
    end

    event :complete_onboarding do
      transitions from: :in_progress,
                  to: :completed,
                  if: :onboarding_completed?
    end
  end
4

1 に答える 1