Ich verwende die rubyist-aasm State Machine für die Behandlung der verschiedenen Zustände in meinem Event-Objekt (Ereignis initialisiert, Ereignis diskutiert, Ereignis veröffentlicht, etc.). Ich habe Wächter hinzugefügt, um Zustandsänderungen zu verhindern, wenn bestimmte Bedingungen nicht erfüllt werden.Rails Fehlerbehandlung mit AASM State Machine
Dies alles funktioniert gut, aber es zeigt keine Fehler, wenn eine Statusänderung von der Wache abgelehnt wurde. Irgendeine Idee, wie ich den Staat sehen kann, hat sich nicht geändert? Ich könnte die Zustände manuell überprüfen, aber es klingt wie eine hässliche Lösung.
aasm_state :firststate
aasm_state :secondstate
aasm_event :approve do
transitions :to => :secondstate, :from => [:firststate], :guard => :has_a_price?
end
def has_a_price?
self.price.present?
end
Danke, das würde im Controller funktionieren, aber ich möchte diese Dinge im Modell behalten. Mit Ihrer Lösung könnte ich den Übergang noch in einem anderen Modell verwenden, ohne die Validierung zu bestehen. – Cimm
Ah, ok. IMO die Wache ist nicht wirklich ein Validierungsfehler so weit wie das AR-Modell betroffen ist, aber es ist eine Wache, die einfach schützt den Übergang von der Staatsmaschine auftreten, ich persönlich wäre glücklich mit dem Aufruf der! Methode (in einem anderen Modell oder Controller) und überprüfen Sie die Rückkehr. Du kannst nichts "sehen", wenn du nicht fragst? Ich könnte hier völlig falsch liegen, also werde ich mich freuen zu sehen, ob irgendwelche anderen Lösungen auftauchen. Wenn Sie auch wirklich einen Validierungsfehler wünschen, können Sie etwas wie validates_presence_of hinzufügen: price,: if => "self.second_state?" – tsdbrown