Как вернуть значение по событию 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
Другие вопросы по тегам