2010-06-07 8 views
5

Ich habe das neueste AASM-Juwel erfolgreich in eine Anwendung integriert, um es für die Erstellung eines Assistenten zu verwenden. In meinem Fall habe ich ein Modell, umAbrufen einer Liste von Zuständen/Ereignissen aus einem Modell, das AASM

class Order < ActiveRecord::Base 

    belongs_to :user 
    has_one :billing_plan, :dependent => :destroy 
    named_scope :with_user, ..... <snip> 

    include AASM 

    aasm_column :aasm_state 
    aasm_initial_state :unauthenticated_user 

    aasm_state :unauthenticated_user, :after_exit => [:set_state_completed] 
    aasm_state : <snip> 

    <and following the event definitions> 

end 

Nun würde Ich mag einem Administrator die Möglichkeit geben, seine eigenen grafischen Darstellungen durch die AASM Staaten zu schaffen. Daher habe ich zwei weitere Modelle namens OrderFlow und Transition erstellt, wobei order_flow viele Transitionen hat und orders_to order_flow.

Kein Problem so weit. Nun möchte ich meinem Administrator die Möglichkeit geben, bestehende Übergänge/Ereignisse dynamisch zu einem order_flow Graph hinzuzufügen.

Das Problem ist jetzt, dass ich keine Möglichkeit finde, eine Liste aller Ereignisse/Übergänge aus meinem Bestellmodell zu bekommen. aasm_states_for_select scheint der richtige Kandidat zu sein, aber ich kann es nicht auf meinem Bestellmodell nennen.

Kann jemand helfen?

Danke im Voraus. J.

Antwort

3

Ich verstehe nicht, wie OrderFlow mit Order and Transitions funktioniert, aber ich nahm an, dass Sie nur hinzugefügt, um Ihr Szenario besser zu erklären.

ClassName.aasm_states_for_select gibt Ihnen eine Liste der Zustände, die im Modell deklariert sind.

+7

Das ist jetzt veraltet. Verwenden Sie 'ClassName.aasm.states_for_select'. –

1

auch, nicht 100% sicher, wonach Sie fragen, aber wenn Sie alle für Ihr Modell deklarierten Zustände und Ereignisse möchten, können Sie diese erhalten, indem Sie Order.aasm_states bzw. Order.aasm_events aufrufen.

0

Eine elegantere Ruby-Syntax kann verwendet werden, wie in diesem Beispiel in IRB unten. Sie erhalten alle zulässigen Zustände in einem Array von Symbolen.

1.9.3-p0 :011 > ApprovalRequest.aasm_states.map(&:name) 

=> [: erstellt: eingereichten: abgelehnt,: genehmigt]

2

Mit der Version 3.0.18 können Sie ClassName.aasm.states

+1

'ClassName.aasm.states.map (&: name)' wird Ihnen ein Array von Symbolen liefern, was Ihnen vielleicht gefällt. – rattray

0

Für Ereignisse in 3.1.1 verwendete ich Model.aasm.events.keys verwenden sollten, erhalten ein Array von Ereignisnamensymbolen. In den letzten Versionen .map(&:name) wird es nicht für Sie tun.