我正在用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宝石。谢谢! –