2010-06-07 13 views
5

Ho integrato con successo la gemma AASM più recente in un'applicazione, utilizzandola per la creazione di una procedura guidata. Nel mio caso ho un ordine modelloOttenere l'elenco di stati/eventi da un modello che 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 

Ora vorrei dare un amministratore la possibilità di creare i propri grafici attraverso gli stati AASM. Pertanto ho creato due ulteriori modelli denominati OrderFlow e Transition in cui order_flow ha molte transizioni e ordina appartenere a order_flow.

Nessun problema finora. Ora vorrei dare al mio amministratore la possibilità di aggiungere dinamicamente transizioni/eventi esistenti a un grafico order_flow.

Il problema ora è che non trovo alcuna possibilità di ottenere un elenco di tutti gli eventi/transizioni dal mio modello di ordine. aasm_states_for_select sembra essere il candidato corretto, ma non posso chiamarlo sul mio modello di ordine.

Qualcuno può aiutare?

Thx in anticipo. J.

risposta

3

Non capisco come funziona OrderFlow con Order e Transitions, ma ho pensato che l'avessi incluso per spiegare meglio il tuo scenario.

ClassName.aasm_states_for_select fornisce un elenco di stati dichiarati nel modello.

+7

Questo è deprecato ora. Usa 'ClassName.aasm.states_for_select'. –

1

Inoltre, non sicuro al 100% quello che stai chiedendo, ma se vuoi dichiarare tutti gli stati e gli eventi per il tuo modello, puoi ottenerlo chiamando rispettivamente Order.aasm_states e Order.aasm_events.

0

È possibile utilizzare una sintassi Ruby più elegante, come nell'esempio riportato di seguito in IRB. Ottieni tutti gli stati ammissibili in una serie di simboli.

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

=> [: creato,: presentata,: respinto,: approvato]

2

Con la versione 3.0.18, è possibile dovrebbe usare ClassName.aasm.states

+1

'ClassName.aasm.states.map (&: name)' otterrà una matrice di simboli, che potrebbe essere ciò che desideri. – rattray

0

Per eventi in 3.1.1 ho usato Model.aasm.events.keys per ottenere una serie di simboli di nomi di eventi. Nelle versioni recenti .map(&:name) non lo farà per te.

Problemi correlati