【发布时间】:2012-11-05 15:29:13
【问题描述】:
我们有一个 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 源代码的内部来实现, 可以说,这可能不是一个好习惯。有什么想法吗?
只是想知道以前是否有人这样做过。
谢谢!
【问题讨论】:
标签: ruby-on-rails ruby aasm