我们有一个 Ruby on Rails 应用程序。
我们使用 Ruby 的 aasm gem 来管理对象的状态。
has_state
aasm do
state :created, :initial => true
state :submitted
state :rejected
state :approved
event :submit do
transitions :to => :submitted, :from => [:created]
end
event :mark_as_incomplete do
transitions :to => :created, :from => [:submitted]
end
event :approve do
transitions :to => :approved, :from => [:submitted]
end
event :reject do
transitions :to => :rejected, :from => [:submitted]
end
end
如果我们知道一个对象的当前状态,可以使用
object.aasm_current_state
而且我们也知道要转换到的状态,我们如何调用事件?
请注意,from-state 和 to-state 是变量,因此我们需要动态地执行上述操作。当然,对于某些 to-state 和 from-state 组合,转换不可用,在这种情况下,我们应该检测到错误。
我们还假设在任何两个状态组合(to-state 和 from-state)之间,只有 1 个事件,我认为理论上可以有超过 1 个。
我认为这可以通过深入研究 aasm 源代码的内部来实现,可以说这可能不是一个好习惯。有什么想法吗?
只是想知道以前是否有人这样做过。
谢谢!