我正在用RoR構建一個Web應用程序,它有各種模型。每個型號都會有不同的狀態,例如:什麼是可用的方式來處理各種模型的軌道狀態
用戶 - 由管理員批准,由政府批准,拒絕,暫停,列入黑名單,業主,租賃
車 - 上市,隱藏,批准,已拒絕暫停。
我想知道處理各種狀態的最佳方式,其中一些州相互排斥,一些州可以共存。
我知道我們可以使用'state_machine'寶石。但我想知道是否有任何行業最佳做法。
感謝
我正在用RoR構建一個Web應用程序,它有各種模型。每個型號都會有不同的狀態,例如:什麼是可用的方式來處理各種模型的軌道狀態
用戶 - 由管理員批准,由政府批准,拒絕,暫停,列入黑名單,業主,租賃
車 - 上市,隱藏,批准,已拒絕暫停。
我想知道處理各種狀態的最佳方式,其中一些州相互排斥,一些州可以共存。
我知道我們可以使用'state_machine'寶石。但我想知道是否有任何行業最佳做法。
感謝
我想最好的辦法是處理的各種狀態,其中 的一些州是互相排斥的,有些是可以並存的。
如果出現這種情況,請考慮以具有多個狀態列的方式構建模型。即在您的示例中,我可以想到用戶的狀態(由管理員批准,由政府批准,拒絕,暫停,列入黑名單)和類型(所有者,租戶)。
至於管理狀態和狀態之間的不同轉換,我建議你看看workflow gem。非常靈活,乾淨而智能的管理狀態的方法。
我同意@關於用戶的狀態和它的類型之間的區別。小心合併實際上彼此獨立的屬性(共存是一個警告標誌) - 以後很難將它們分開,特別是當它們一起編入列表中時。
如果你不需要/想要一個完整的狀態機寶石,我通常把這些模塊作爲常量。
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
一些元編程。
我正在嘗試aasm寶石。謝謝! –