我有带有 ActiveRecord 模型的 AASM。
有许多状态和事件及其转换。我想创建一个事件,该事件将允许从除一个状态之外的任何状态进行转换。
event :set_vacant_pass do
transitions to: :vacant_pass, from: ??
end
我有带有 ActiveRecord 模型的 AASM。
有许多状态和事件及其转换。我想创建一个事件,该事件将允许从除一个状态之外的任何状态进行转换。
event :set_vacant_pass do
transitions to: :vacant_pass, from: ??
end
经过一番挖掘,我决定采用简单的解决方案:
event :set_vacant_pass do
transitions to: :vacant_pass, from: Vacation.man_statuses.except('vacant_pass').keys
end
这将允许从除 之外的任何状态进行事件转换vacant_pass
。
(man_status
是枚举列并用于AASM
)
Spitballing so 语法可能并不完美,但您可以使用列表明确指定这一点。假设您要转换到“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)
获取包含类的所有可能状态的符号数组。