使用rails中的枚举建模状态和子状态

时间:2014-10-04 13:02:40

标签: ruby-on-rails enums state-machine states

我有一个有状态的对象。这可以是:

'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,是否有某种方法可以简化查询?

您建议使用的任何特定结构/方法?

注意:我正在考虑使用枚举来建模状态。

1 个答案:

答案 0 :(得分:1)

我建议使用State Machine并将您的状态存储在一个属性中。

使用State Machine,您只需要在模型中添加状态字段,然后就可以使用gem的DSL定义状态。 State Machine将处理状态之间转换的逻辑,并为每个州提供良好的getter和setter。