Как вернуть значение по событию aasm? - PullRequest
3 голосов
/ 10 декабря 2010

Как заставить событие 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 Ответ

0 голосов
/ 20 октября 2012

Вы не можете этого сделать. Статус возврата используется, чтобы указать, был ли переход подозрительным или нет. Но мне любопытно, какой вариант использования у вас есть, что вам нужно.

Но вы можете обернуть переход состояния и использовать переменную, установленную методом 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
...