Как вернуть значение по событию aasm?
Как заставить событие aasm возвращать значение, отличное от логического? Я использую AASM 2.2.0
Например, есть модель MusicPlayer, которая случайным образом воспроизводит песню при запуске
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
Теперь, если я хочу вернуть песню, которая в данный момент воспроизводится, при запуске проигрывателя, как мне сделать это с помощью метода play_song?
1 ответ
Решение
Вы не можете сделать это. Статус возврата используется, чтобы указать, был ли переход подозрительным или нет. Но мне интересно, какой у вас сценарий использования, который вам нужен.
Но вы можете обернуть переход состояния и использовать переменную, установленную 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