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