Suche…


Grundzustand bei AASM

Normalerweise erstellen Sie am Ende Modelle, die einen Zustand enthalten, und dieser Zustand ändert sich während der Lebensdauer des Objekts.

AASM ist eine Finite-State-Machine-Enabler-Bibliothek, die Ihnen beim einfachen Durcharbeiten des Prozessdesigns Ihrer Objekte helfen kann.

Wenn Sie so etwas in Ihrem Modell haben, stimmt das mit der Idee von Fat Model, Skinny Controller , einer der besten Methoden von Rails, überein. Das Modell ist allein verantwortlich für die Verwaltung seines Zustands, seiner Änderungen und für das Generieren der durch diese Änderungen ausgelösten Ereignisse.

Zu installieren, in Gemfile

gem 'aasm'

Betrachten Sie eine App, in der der Benutzer ein Produkt zu einem Preis anbietet.

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

Die Statusklassen der Quote-Klasse können jedoch verwendet werden. Dies ist jedoch am besten für Ihren Prozess.

Sie können sich die Zustände als Vergangenheit vorstellen, wie im vorherigen Beispiel oder auch in einer anderen Form, zum Beispiel: Preise, Zahlung, Lieferung usw. Die Benennung der Zustände hängt von Ihnen ab. Aus persönlicher Sicht funktionieren vergangene Zustände besser, da Ihr Endzustand sicherlich eine vergangene Aktion ist und eine bessere Verknüpfung mit den Ereignisnamen herstellt, was später erläutert wird.

HINWEIS: Achten Sie darauf , welche Namen Sie verwenden, müssen Sie sich Sorgen über nicht mit Ruby oder Ruby on Rails reservierten Schlüsselwörter, wie valid , end , being usw.

Nachdem wir die Zustände und Übergänge definiert haben, können wir nun auf einige von AASM erstellte Methoden zugreifen.

Zum Beispiel:

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.

Wie Sie sehen können, dass das Ereignis Übergänge hat, bestimmen diese Übergänge, wie sich der Zustand beim Ereignisaufruf ändert. Wenn das Ereignis aufgrund des aktuellen Status ungültig ist, wird ein Fehler ausgegeben.

Die Ereignisse und Übergänge haben beispielsweise auch andere Rückrufe

guard: product_delivered?

product_delivered? das product_delivered? Methode, die einen Boolean zurückgibt. Wenn es sich als falsch herausstellt, wird der Übergang nicht angewendet. Wenn keine anderen Übergänge verfügbar sind, ändert sich der Status nicht.

success: :reverse_charges

Wenn diese Übersetzung erfolgreich durchgeführt wird, wird die :reverse_charges Methode aufgerufen.

Es gibt mehrere andere Methoden in AASM mit mehr Rückrufen im Prozess. Dies hilft Ihnen jedoch, Ihre ersten Modelle mit endlichen Zuständen zu erstellen.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow