AASM从一个州转移到一个州

时间:2018-05-31 07:38:13

标签: ruby-on-rails ruby aasm

我有AASM和ActiveRecord模型。

有许多状态和事件及其过渡。 我想创建一个事件,允许从除一个状态之外的任何状态转换。

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

2 个答案:

答案 0 :(得分:1)

经过一番挖掘后,我决定采用简单的解决方案:

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

这将允许从vacant_pass以外的任何州转移事件。

man_status是枚举列,用于AASM

答案 1 :(得分:0)

Spitballing所以语法可能不完美,但您可以使用列表明确指定。假设您转换为“vacant_pass”的有效状态为“new”,“created”和“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)

获取包含您班级所有可能状态的符号数组。