2010-06-07 9 views
5

He integrado exitosamente la joya AASM más reciente en una aplicación, usándola para la creación de un asistente. En mi caso tengo un orden de modeloObteniendo la lista de estados/eventos de un modelo que 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 

Ahora me gustaría dar un administrador la posibilidad de crear sus propios gráficos a través de los estados de la AASM. Por lo tanto, creé dos modelos adicionales denominados OrderFlow y Transition, donde order_flow tiene muchas transiciones y orden belongs_to order_flow.

No hay problema hasta el momento. Ahora me gustaría darle a mi administrador la posibilidad de agregar dinámicamente transiciones/eventos existentes a un gráfico order_flow.

El problema ahora es que no encuentro ninguna posibilidad de obtener una lista de todos los eventos/transiciones fuera del modelo de mi pedido. aasm_states_for_select parece ser el candidato correcto, pero no puedo llamarlo en mi modelo de pedido.

¿Alguien puede ayudar?

Thx de antemano. J.

Respuesta

3

No entiendo cómo funciona OrderFlow con Order y Transitions, pero asumí que acabas de incluir eso para explicar mejor tu situación.

ClassName.aasm_states_for_select le proporciona una lista de los estados que se declaran en el modelo.

+7

Eso está en desuso ahora. Use 'ClassName.aasm.states_for_select'. –

1

Además, no está 100% seguro de lo que está pidiendo, pero si desea declarar todos los estados y eventos para su modelo, puede obtenerlos llamando a Order.aasm_states y Order.aasm_events, respectivamente.

0

Se puede usar una sintaxis Ruby más elegante, como en este ejemplo en IRB a continuación. Obtiene todos los estados permitidos en una matriz de símbolos.

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

=> [: creado,: presentado,: rechazada,: aprobado]

2

Con la versión 3.0.18, puede deberían utilizar ClassName.aasm.states

+1

'ClassName.aasm.states.map (&: name)' te proporcionará una matriz de símbolos, que puede ser lo que quieras. – rattray

0

Para eventos en 3.1.1 que utilicé Model.aasm.events.keys para obtener una matriz de símbolos de nombre de evento. En las versiones recientes .map(&:name) no lo hará por usted.

Cuestiones relacionadas