2015-05-26 44 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一些元编程。

相关问题