AASM переход из, но за исключением одного состояния - PullRequest
0 голосов
/ 31 мая 2018

У меня есть AASM с моделью ActiveRecord.

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

event :set_vacant_pass do
  transitions to: :vacant_pass, from: ??
end

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Spitballing, поэтому синтаксис может быть не идеальным, но вы можете указать это явно, используя список.Предположим, что ваши действительные состояния для перехода к «vacant_pass» из «new», «create» и «closed»:

event :set_vacant_pass do
  transitions from: [:new, :created, :closed], to: :vacant_pass
end

Или вы можете использовать охрану

event :set_vacant_pass do
  transitions_from: Vacations.man_statuses.keys, to: :vacant_pass, guard: :transition_valid?
end

def transition_valid?
  self.state == :vacant_pass
end

Добавлены дополнительные, вы можете использовать

ClassName.aasm.states.map(&:name)

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

0 голосов
/ 31 мая 2018

После некоторого копания я просто решил иметь простое решение:

event :set_vacant_pass do
  transitions to: :vacant_pass, from: Vacation.man_statuses.except('vacant_pass').keys
end

Это позволит переходить событие из любого состояния, кроме vacant_pass.

(man_status - столбец перечисленияи используется для AASM)

...