Как получить все события state_machine из класса модели?

Можно ли получить все события из класса модели? Я хочу отфильтровать список по событиям.

Был похожий вопрос в списке рассылки обо всех переходах.

Я использую https://github.com/pluginaweek/state_machine.


person tonymarschall    schedule 05.03.2012    source источник
comment
Хорошо, я нашел ответ на предыдущий вопрос: stackoverflow.com/questions/4138437/   -  person tonymarschall    schedule 05.03.2012
comment
Я должен исправить себя. Ответ на приведенные выше вопросы дает все переходы, а не события.   -  person tonymarschall    schedule 05.03.2012
comment
Вероятно, это будет зависеть от того, какое программное обеспечение конечного автомата вы используете.   -  person Pavling    schedule 06.03.2012
comment
Правильно, я расширил свой вопрос   -  person tonymarschall    schedule 06.03.2012


Ответы (3)


Прямо на странице github, на которую вы ссылаетесь, показаны методы API для:

vehicle.state_events  # shows all the events possible from the current state

и

vehicle.state_paths.events # shows all the events for an object
person Pavling    schedule 06.03.2012
comment
Да, но это для конкретного объекта, а не класса модели - person tonymarschall; 06.03.2012
comment
Vehicle.new.state_events или Vehicle.new.state_paths.events тогда... возможно, есть более прямой способ, если вы просмотрите связанный с вами API, кажется, что каждый объект получает коллекцию событий. Но я не пользуюсь этим конечным автоматом, так что больше ничего сказать не могу. - person Pavling; 06.03.2012
comment
Вот еще немного информации по этой теме: github.com/pluginaweek/state_machine/issues/165 - person tonymarschall; 07.03.2012

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

Что работает для меня:

Invoice.state_machines[:state].events.map(&:name)

В моем случае имя класса — invoice, а state_machine — state.

person Hendrik    schedule 22.05.2014

изменить 2014: в этом списке указаны состояния, а не события

Вот как я это сделал, чтобы перечислить только ключи

def self.membership_states
  self.state_machines[:membership_status].states.map(&:name)
end

$ User.membership_states
> [:applied, ...
person oma    schedule 06.11.2012
comment
ОП запросил события, а не состояния. Так что я думаю, это не сработает. - person Hendrik; 22.05.2014
comment
@ Хендрик, да, ты прав, и это не одно и то же: D прошло некоторое время, как ты думаешь, мне следует удалить? - person oma; 22.05.2014
comment
Нет, просто продолжайте вносить свой вклад :) - person Hendrik; 23.05.2014