2012-01-17 3 views
5

Questo è quello che ho:rails state_machine: Come attivare un'azione su: stato iniziale?

state_machine :state, :initial => :open do 
    after_transition :on => :buy, :do => :send_buy_notification_email 
    after_transition :on => :take, :do => :send_take_notification_email 
    after_transition :on => :accept, :do => :send_accept_notification_email 
    after_transition :on => :cancel, :do => :send_cancel_notification_email 

ora mi piacerebbe far scattare: send_trade_notification_email dallo stato iniziale aperta.

Come faccio?

Cheers,

Joel

risposta

3

Dal momento che le transizioni di stato sono analoghi ai 'soliti' callback AR, forse il metodo deve essere attivato nel callback after_create? Dopo tutto, la transizione è da zero a aperto che sarebbe accaduto su Crea:

after_create :send_trade_notification_email 

Il che, se fosse permesso, sarebbe ottenere la stessa cosa come:

after_transition :on=>:create, :do=>:send_trade_notification_email 
+0

Sì, è logico. Ci proverò! Thx – zabumba

+0

Ciò significa che 'after_transition' può essere applicato a': create' e ': update'? – lulalala

0

ho trovato un altro approccio

def initial_send_trade_notification_email 
    send_trade_notification_email #do what you need on create 
    :open # return initial state 
end 

state_machine initial: lambda(&:initial_send_trade_notification_email) do 
    #... 
end