跟踪状态的“正确”方式是什么?

时间:2013-10-28 17:44:12

标签: ruby-on-rails

我有一个票务系统,票证可以是未决,未读,已回复,已关闭等。它们存储在另一个名为“status”的模型中,每个状态都必须通过手动播种数据库来手动完成。

sudocode:

//database is seeded and creates various statuses

ticket.new(params here)
ticket.save!
//ticket status automatically set in before_create
//status = Status.find(1); 
ticket.status.description //'unread' to start

I post on it, ticket updates to replied
//ticket status automatically set in before_update
//status = Status.find(3); 
ticket.status.description //'replied'

但这很糟糕,因为当故障单自动更新它的状态并且数据库没有被播种(例如在工厂测试中)时会出现一堆错误。设置它的“正确”方法是什么?

在字符串文字中存储内容很糟糕,但我只是不知道......确实......

1 个答案:

答案 0 :(得分:2)

如果你还没有,你应该查看state_machine gem。它可能就是你想要的:https://github.com/pluginaweek/state_machine

您可以通过在表中创建要使用状态的状态列来使用它,然后在模型中设置所需的状态。

您可以使用此gem轻松管理状态。如果您需要其他信息或不同的宝石,可以查看此截屏视频:http://railscasts.com/episodes/392-a-tour-of-state-machines

最后,他还向您展示了如果您因某些原因不想使用gem而如何从头开始创建有限状态机。