我有一个有状态的对象。这可以是:
'scheduled', 'on-shift' or 'past'
此外,'on-shift'可以是州:
'available', 'busy' or 'inactive'
在我的rails应用程序中建模这些状态的最佳方法是什么?
是否:
一个。创建两个状态属性:
1. object_state - can take the value: 'scheduled', 'on-shift' or 'past'
2. on_shift_state - can take the value: 'available', 'busy' or 'inactive'
湾创建一个单一的州属性,可以取值:
'scheduled', 'past', 'available', 'busy' or 'inactive'.
℃。其他方式。
我认为选项b可以确保数据库中的逻辑一致性,但会增加查询的复杂性,例如:如果我想搜索“在线”的单位,我需要搜索3种不同的状态。它也可能更难扩展,例如如果我想在以后添加更多状态。
如果我选择选项b,是否有某种方法可以简化查询?
您建议使用的任何特定结构/方法?
注意:我正在考虑使用枚举来建模状态。
答案 0 :(得分:1)
我建议使用State Machine并将您的状态存储在一个属性中。
使用State Machine,您只需要在模型中添加状态字段,然后就可以使用gem的DSL定义状态。 State Machine将处理状态之间转换的逻辑,并为每个州提供良好的getter和setter。