我需要一个用于消息专用系统和订单状态系统的状态机。

您可以看到以下两个宝石:

https://github.com/pluginaweek/state_machine

https://github.com/rubyist/aasm

编辑..

我在mongodb数据库中使用mongoid

哪种宝石最适合此功能?

最佳答案

更新:

查看最近的RailsCast:A Tour of State Machines

上一个答案:

两种宝石都可以很好地工作,可以与Mongoid兼容,并且可以积极维护。

过去我曾经使用过AASM,并且已经使用了更长的时间,但是state_machine gem具有更多的功能和更多的选择。例如检查state_machine在基类上生成的方法(在其示例下方);您可以定义更多详细信息,例如过渡回调,条件过渡;您可以进行路径分析,甚至还可以使用GraphViz生成器来生成状态图的漂亮图片。

如果只需要一个简单的状态机,则可以使用AASM。如果您需要建模更多细节,例如条件转换或转换回调,路径分析,对状态进行大量查询或需要嵌套状态机,则可以使用state_machine gem。

参考文献:

AASM:https://github.com/aasm/aasm

state_machine: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

08-26 15:32