2016-08-01 6 views
7

Gibt es eine Möglichkeit, eine Schutzeinrichtung zu definieren (z. B. has_legs?), die in jedem Fall vor dem Eintritt in einen Zustand (z. B. running) geprüft wird?So richten Sie eine Schutzeinrichtung auf der Zustandsebene in AASM ein

In der Liste aller möglichen Rückrufe gibt es Wächter für Ereignisse und Übergänge, aber nicht für Ereignisse.

Ich habe versucht, eine bedingte Validierung für das Modell durchzuführen. Es funktionierte in der Ereignisausführung, aber nicht für Aasm-Methoden (zB may_run?).

+0

Können Sie Ihren Code anzeigen? –

Antwort

0

Ich kenne keine Einbaumethode. Ich würde einen Workaround mit einem Hash verwenden, der die Standardoptionen enthält.

DEFAULT_EVENT_OPTS = { guard: ... } 
DEFAULT_TRANSITION_OPTS = { ... } 

event :clean, DEFAULT_EVENT_OPTS.merge({ ... }) do 
    transitions DEFAULT_TRANSITION_OPTS.merge({:from => :running, :to => :cleaning, :guard => :cleaning_needed?}) 
end