我需要一个状态机用于消息私有系统和订单状态系统。
你可以看到这两颗宝石:
https://github.com/pluginaweek/state_machine
https://github.com/rubyist/aasm
我正在使用 mongoid 和 mongodb 数据库
什么宝石最适合这个功能?
更新:
查看最近的 RailsCast:状态机之旅
需要提到的是,当您使用状态机时,可能会很难为处于无效状态的测试生成对象..
之前的回答:
这两个 gem 都运行良好,与 Mongoid 兼容,并且得到积极维护。
我过去使用过 AASM,它的存在时间有点长,但是 state_machine gem 有更多的功能和更多的选项。例如检查 state_machine 在基类上生成的方法(在其示例下方);您可以定义更多详细信息,例如转换回调、条件转换;您可以进行路径分析,甚至还有 GraphViz 生成器可以生成状态图的漂亮图片。
如果您只需要一个简单的状态机,您可以使用 AASM。如果您需要建模更多细节,例如条件转换或转换回调、路径分析、对状态进行大量查询,或者需要嵌套状态机,那么请使用 state_machine gem。
参考资料:
AASM:https://github.com/aasm/aasm
状态机:https://github.com/pluginaweek/state_machine
有关state_machine的其他信息:
http://www.pluginaweek.org/2009/03/08/state_machine-one-machine-to-rule-them-all/
http://rdoc.info:8080/github/pluginaweek/state_machine/master/StateMachine/Machine