为模型创建状态属性

时间:2015-06-21 12:12:38

标签: ruby-on-rails ruby activerecord model attributes

我想为我的status模型创建一个Task属性,该属性将按顺序指示它在三部分进度中的位置:open => in-progress => complete。它的工作方式类似于亚马逊包的交付方式:ordered =>运送=>交付。我想知道什么是设置此属性的最佳方法。我可能错了,但创建三个独立的布尔属性似乎有点多余。最好的方法是什么?

2 个答案:

答案 0 :(得分:8)

Rails 4内置enum macro。它使用单个整数列并映射到键列表。

class Order
  enum status: [:ordered, :shipped, :delivered]
end

将状态映射为:{ ordered: 0, shipped: 1, delivered: 2}

它还创建了范围和“审讯方法”。

order.shipped?
Order.delivered.all

在使用哈希参数编写查询时,它还会映射枚举值:

Order.where(status: [:shipped, :delivered])

答案 1 :(得分:1)

您应该使用aasm gem。它有模型,回调功能等的aasm_states。