サーチ…


AASMによる基本状態

通常は、状態を含むモデルを作成することになり、その状態はオブジェクトの存続期間中に変化します。

AASMは、オブジェクトのプロセス設計を簡単に通過することに対応して、 有益なステートマシンイネーブラーライブラリです。

あなたのモデルにこのようなことを持たせることは、Railsのベストプラクティスの1つであるFat Model、Skinny Controllerのアイデアと結びついています 。モデルは、状態、その変更、およびそれらの変更によって引き起こされるイベントの生成を管理する責任がある唯一のモデルです。

Gemfileにインストールするには

gem 'aasm'

ユーザーが価格のために製品を引用するAppを考えてみましょう。

class Quote

  include AASM

  aasm do
    state :requested, initial: true  # User sees a product and requests a quote
    state :priced                    # Seller sets the price 
    state :payed                     # Buyer pays the price
    state :canceled                  # The buyer is not willing to pay the price
    state :completed                 # The product has been delivered.

    event :price do
        transitions from: requested, to: :priced
    end

    event :pay do
        transitions from: :priced, to: :payed, success: :set_payment_date
    end

    event :complete do
        transitions from: :payed, to: :completed, guard: product_delivered?
    end

    event :cancel do
        transitions from: [:requested, :priced], to: :canceled
        transitions from: :payed, to: canceled, success: :reverse_charges
    end

   
  end

  private

  def set_payment_date
    update payed_at: Time.zone.now
  end
end

ただし、Quoteクラスの状態は、プロセスに最適です。

あなたは、前の例のように過去のもの、過去のもの、あるいは他の時制のものと考えることができます。たとえば、価格設定、支払い、配送などです。州の命名はあなた次第です。個人的な観点から見ると、過去の状態は、あなたの最終状態が必ず過去の行動であり、イベント名とのリンクが良好になるため、より効果的です。

注意:あなたはどの名前を使用するか注意してください。あなたはRubyやRuby on Railsの予約済みキーワード( validendbeingなど)を使用しないことを心配する必要beingあります。

状態と遷移を定義したら、AASMによって作成されたいくつかのメソッドにアクセスできるようになりました。

例えば:

Quote.priced  # Shows all Quotes with priced events
quote.priced? # Indicates if that specific quote has been priced
quote.price!  # Triggers the event the would transition from requested to priced.

イベントに遷移があるのがわかるように、この遷移は、イベント呼び出し時に状態がどのように変化するかを決定します。現在の状態のためにイベントが無効な場合、エラーが発生します。

イベントとトランジションには、他にもいくつかのコールバックがあります。

guard: product_delivered?

product_delivered?呼び出しproduct_delivered?メソッドはブール値を返します。それが偽になると、遷移は適用されず、他の遷移が利用できない場合、状態は変化しない。

success: :reverse_charges

その変換が正常に行われた場合、 :reverse_chargesメソッドが呼び出されます。

AASMには、このプロセスでコールバックが増えているいくつかの方法がありますが、これは有限状態で最初のモデルを作成するのに役立ちます。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow