Получение списка состояний / событий от модели, которая AASM - PullRequest
6 голосов
/ 07 июня 2010

Я успешно интегрировал самый последний гем AASM в приложение, используя его для создания мастера. В моем случае у меня есть модель заказа

class Order < ActiveRecord::Base

  belongs_to :user
  has_one :billing_plan, :dependent => :destroy
  named_scope :with_user, ..... <snip>

  include AASM

  aasm_column :aasm_state
  aasm_initial_state :unauthenticated_user

  aasm_state :unauthenticated_user, :after_exit => [:set_state_completed]
  aasm_state : <snip>

  <and following the event definitions>

end

Теперь я хотел бы дать администратору возможность создавать свои собственные графики через состояния AASM. Поэтому я создал две дополнительные модели, названные OrderFlow и Transition, в которых order_flow имеет много переходов и order___ order_flow.

Пока проблем нет. Теперь я хотел бы дать своему администратору возможность динамически добавлять существующие переходы / события в граф order_flow.

Проблема сейчас в том, что я не нахожу никакой возможности получить список всех событий / переходов из моей модели заказа. aasm_states_for_select кажется правильным кандидатом, но я не могу вызвать его в моей модели заказа.

Может кто-нибудь помочь?

Спасибо заранее. J.

Ответы [ 5 ]

3 голосов
/ 26 октября 2010

Я не понимаю, как OrderFlow работает с Order и Transitions, но я предположил, что вы просто включили это, чтобы лучше объяснить свой сценарий.

ClassName.aasm_states_for_select предоставляет вам список состояний, объявленных в модели.

2 голосов
/ 22 мая 2013

С версией 3.0.18 вы можете использовать ClassName.aasm.states

1 голос
/ 05 декабря 2010

также, не на 100% уверен, что вы просите, но если вы хотите, чтобы все состояния и события были объявлены для вашей модели, вы могли бы получить их, вызвав Order.aasm_states и Order.aasm_events соответственно.

0 голосов
/ 29 апреля 2014

Для событий в 3.1.1 Я использовал Model.aasm.events.keys, чтобы получить массив символов имени события. В последних версиях .map(&:name) не сделает это за вас.

0 голосов
/ 05 ноября 2012

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

1.9.3-p0 :011 > ApprovalRequest.aasm_states.map(&:name)

=> [: создано,: отправлено,: отклонено,: одобрено]

...