在state_machine中,如何根据运行事件的结果设置下一个状态?
我在我的 Rails3 应用程序中使用 Aaron Pfeifer 的 state_machine gem - 它(仍然)很漂亮。
我有一个事件,其结果在处理后才知道,我想根据结果设置以下状态。此处显示的“明显”方法不起作用:它会引发 ArgumentError: :picked_many is not aknown state value
错误。
根据事件结果设置状态的正确方法是什么? (或者我只是想错了?)
class MyModel < ActiveRecord::Base
state_machine :initial => :top do
event :pickanumber do
transition any => any
end
state :picked_zero
state :picked_one
state :picked_many
end
def pickanumber(n)
self.state = case n
when 0 then :picked_zero
when 1 then :picked_one
else :picked_many
end
super
end
end
和一个示例运行:
> m = MyModel.create
=> #<MyModel id: 26, state: "top", ...>
> m.pickanumber(2)
ArgumentError: :picked_many is not a known state value
I am using Aaron Pfeifer's state_machine gem in my Rails3 app -- it's (still) nifty.
I have a event whose outcome isn't known until it has been processed, and I would like to set the following state based on the outcome. The 'obvious' approach shown here doesn't work: it raises an ArgumentError: :picked_many is not a known state value
error.
What's the right way to set the state based on the outcome of an event? (Or am I just thinking about this wrong?)
class MyModel < ActiveRecord::Base
state_machine :initial => :top do
event :pickanumber do
transition any => any
end
state :picked_zero
state :picked_one
state :picked_many
end
def pickanumber(n)
self.state = case n
when 0 then :picked_zero
when 1 then :picked_one
else :picked_many
end
super
end
end
and a sample run:
> m = MyModel.create
=> #<MyModel id: 26, state: "top", ...>
> m.pickanumber(2)
ArgumentError: :picked_many is not a known state value
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
状态在内部存储为字符串而不是符号。
这应该有效...
State is internally stored as a string and not symbol.
This should work...