2014-10-04 65 views
1

我有一個有狀態的對象。這可以是:「上移」在rails中使用枚舉建模狀態和子狀態

'scheduled', 'on-shift' or 'past' 

此外,可狀態:

'available', 'busy' or 'inactive' 

什麼是在我的Rails應用程序,這些國家建立最佳方式是什麼?

是不是:

a。創建兩個狀態屬性:

1. object_state - can take the value: 'scheduled', 'on-shift' or 'past' 
2. on_shift_state - can take the value: 'available', 'busy' or 'inactive' 

b。創建單個狀態屬性,其值可以爲:

'scheduled', 'past', 'available', 'busy' or 'inactive'. 

c。另一種方式。

我認爲選項b將確保數據庫中的邏輯一致性,但會增加查詢的複雜性,例如,如果我想要搜索'on-shift'的單元,我需要搜索3種不同的狀態。它也可能更難以延伸,例如如果我想在以後添加更多的州。

如果我選擇b,有沒有簡化查詢的方法?

你會建議使用任何特定的結構/方法?

注:我想使用枚舉來模擬狀態。

回答

1

我會推薦使用State Machine並將您的狀態存儲在單個屬性中。

使用狀態機,您只需將狀態字段添加到模型中,然後您可以使用gem的DSL定義狀態。狀態機將處理狀態之間轉換的邏輯,並將爲每個狀態提供很好的getter和setter。

+0

謝謝,我聽說過關於狀態機的好東西,儘管我認爲它可能對我的應用程序來說太重了。關於如何使用寶石解決我的問題的任何具體想法?我瞭解如何定義狀態,事件和轉換,但不知道如何創建子狀態或狀態組。 – user3711600 2014-10-04 14:03:30