我有一个票务系统,票证可以是未决,未读,已回复,已关闭等。它们存储在另一个名为“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'
但这很糟糕,因为当故障单自动更新它的状态并且数据库没有被播种(例如在工厂测试中)时会出现一堆错误。设置它的“正确”方法是什么?
在字符串文字中存储内容很糟糕,但我只是不知道......确实......
答案 0 :(得分:2)
如果你还没有,你应该查看state_machine gem。它可能就是你想要的:https://github.com/pluginaweek/state_machine
您可以通过在表中创建要使用状态的状态列来使用它,然后在模型中设置所需的状态。
您可以使用此gem轻松管理状态。如果您需要其他信息或不同的宝石,可以查看此截屏视频:http://railscasts.com/episodes/392-a-tour-of-state-machines
最后,他还向您展示了如果您因某些原因不想使用gem而如何从头开始创建有限状态机。