新手问题 mongoid,订单有状态,会员有状态,这样设计可否?

stephen · 2013年03月14日 · 最后由 stephen 回复于 2013年03月15日 · 2696 次阅读

使用是 mongoid,订单有未付款,正在发货,完成等状态,会员有正常,禁言,禁用等状态,这样我打算用 polymorphic associations 来设计! Model Order

has_many :statuses, :as => :statusable
belongs_to :status

Model User

has_many :statuses, :as => :statusable
belongs_to :status

Model Status

belongs_to :statusable, :polymorphic => true
has_many :orders
has_many :users

这样设计可行?大家是如何设计的?求经验!

我认为直接把状态做为一个字段或 sub document 分别放在订单和会员下就行了。状态会有多个值,但任意时刻订单应该只有一种状态,所以这是 1 to 1 的关系而不是 1 to many。

直接一个字段存储字符就好了,

new, paid, done

数据库保存为 paid_at, done_at. 以 nil?判断状态,因为初始状态为 null. 状态改变=Time.now,顺便还能得到个时间戳。

整个状态机吧。https://github.com/aasm/aasm 你可以配置一个字典表维护一下状态值就 OK 了

@huacnlee 最简单 @xds2000 这个牛了!谢谢@ashchan @everett 各位啊

@xds2000 遇到这个错误了,google 找不到解决办法! SystemStackError - stack level too deep:

@xds2000 解决,要把include AASM放在第一位!

需要 登录 后方可回复, 如果你还没有账号请 注册新账号