2015-05-26 46 views
0

我正在用RoR構建一個Web應用程序,它有各種模型。每個型號都會有不同的狀態,例如:什麼是可用的方式來處理各種模型的軌道狀態

用戶 - 由管理員批准,由政府批准,拒絕,暫停,列入黑名單,業主,租賃

車 - 上市,隱藏,批准,已拒絕暫停。

我想知道處理各種狀態的最佳方式,其中一些州相互排斥,一些州可以共存。

我知道我們可以使用'state_machine'寶石。但我想知道是否有任何行業最佳做法。

感謝

回答

2

我想最好的辦法是處理的各種狀態,其中 的一些州是互相排斥的,有些是可以並存的。

如果出現這種情況,請考慮以具有多個狀態列的方式構建模型。即在您的示例中,我可以想到用戶的狀態(由管理員批准,由政府批准,拒絕,暫停,列入黑名單)和類型(所有者,租戶)。

至於管理狀態和狀態之間的不同轉換,我建議你看看workflow gem。非常靈活,乾淨而智能的管理狀態的方法。

+0

我正在嘗試aasm寶石。謝謝! –

1

我同意@關於用戶的狀態和它的類型之間的區別。小心合併實際上彼此獨立的屬性(共存是一個警告標誌) - 以後很難將它們分開,特別是當它們一起編入列表中時。

如果你不需要/想要一個完整的狀態機寶石,我通常把這些模塊作爲常量。

class User 
    module State 
    APPROVED_BY_ADMIN  = 'approved_by_admin'.freeze 
    APPROVED_BY_GOVERNMENT = 'approved_by_government'.freeze 
    # ... 
    end 

    module LivingSituation 
    OWNER = 'owner'.freeze 
    RENTER = 'renter'.freeze 
    end 
end 

class Car 
    module State 
    LISTED = 'listed'.freeze 
    # ... 
    end 
end 

讓他們封裝可以,如果你想輕鬆地複製狀態機庫的部件,如Car#listed?你做Car::State.constants一些元編程。

相關問題