2010-12-10 1 views
3

어떻게 aasm 이벤트를 부울 이외의 값으로 반환합니까? 아셈을 사용하고 있습니다. 2.2.0aasm 이벤트에서 값을 반환하는 방법은 무엇입니까?

예 : 지금은 현재 플레이어를 시작하기에 재생되는 노래를 반환 할 경우

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 

을 시작했을 때 무작위로 노래를 재생하는 MusicPlayer 모델, 나는 그것이 'play_song'방법을 통해 어떻게해야합니까이있다?

답변

0

당신은 그렇게 할 수 없습니다. 반환 상태는 전환이 잘못되었는지 여부를 나타내는 데 사용됩니다. 하지만 당신이 필요로하는 유스 케이스가 무엇인지 궁금합니다.

하지만 당신은 상태 전이 포장이처럼 play_song 방법으로 설정되어 변수 사용할 수 있습니다

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

시나리오 위의 사용 사례입니다. – Vignesh

+0

흠, 알 겠어. 당신은 연주하고 있는지, 연주하고 있는지를 알고 싶을뿐입니다. 이것은 상태 기계로 쉽게 해결할 수있는 문제는 아닙니다. 그냥 before_enter와 after_enter 콜백과 같은 몇 가지 콜백이 있다고 상상해보십시오. 그러면 어떤 결과가 나옵니까? 아마도 상태 시스템에서 해당 논리를 유지하고 상태 전이 방법을 감쌀 것입니다. 내 대답을 내 뜻을 업데이트하도록하겠습니다. – alto

+0

맞습니다. 그리고 현재의 노래가 음악 플레이어의 상태를 제공하기 때문에 실제로 더 의미가 있습니다. – Vignesh