2010-12-10 12 views
3

Wie kann ich ein asm-Ereignis einen anderen Wert als boolean zurückgeben? Ich benutze Aasm 2.2.0Wie gibt man einen Wert für ein Ereignis zurück?

z. Es ist ein Modell, das Musicplayer zufällig ein Lied spielt, wenn Jetzt

aasm_state :started, :after_enter => :play_song 
aasm_state :stopped 
aasm_event :start do 
    :transitions :from => :stopped, :to => :started 
end 

def play_song 
    # select and play a song randomly and return the song object 
end 

gestartet, wenn ich den Song zurückkehren wollen, die derzeit auf dem Start der Spieler gespielt wird, wie mache ich es durch das ‚play_song‘ Methode?

Antwort

0

Sie können das nicht tun. Der Rückgabestatus wird verwendet, um anzuzeigen, ob der Übergang erfolgreich war oder nicht. Aber ich bin neugierig, welchen Anwendungsfall du hast, dass du das brauchst.

Aber man kann den Zustandsübergang wickeln und eine Variable verwenden, die von der play_song Methode, wie dieses Set:

aasm_state :started, :after_enter => :play_song 
aasm_state :stopped 
aasm_event :start do 
    :transitions :from => :stopped, :to => :started 
end 

def play_song 
    # select and play a song randomly 
    @song = ... 
end 

def shuffle 
    if start 
    @song 
    end 
end 
+0

Das obige Szenario ist der Anwendungsfall. – Vignesh

+0

Hm, ich verstehe. Sie wollen nicht nur wissen, ob es spielt, sondern auch was gespielt wird. Dies ist kein Problem, das leicht durch eine Zustandsmaschine gelöst werden kann. Stellen Sie sich vor, Sie haben ein paar Rückrufe, zum Beispiel einen before_enter und einen After_enter Callback. Welches Ergebnis würdest du dann zurückgeben? Wahrscheinlich würde ich diese Logik aus der Zustandsmaschine heraushalten und die Zustandsübergangs-Methode umbrechen. Lassen Sie mich meine Antwort für das, was ich meine, aktualisieren. – alto

+0

Das stimmt. Und es macht mehr Sinn, weil der aktuelle Song den Status des Musikplayers angibt. – Vignesh