为模型创建状态属性

Car*_*rds 5 ruby activerecord attributes model ruby-on-rails

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

max*_*max 8

Rails 4有一个内置的枚举宏.它使用单个整数列并映射到键列表.

class Order
  enum status: [:ordered, :shipped, :delivered]
end
Run Code Online (Sandbox Code Playgroud)

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

它还创建了范围和"审讯方法".

order.shipped?
Order.delivered.all
Run Code Online (Sandbox Code Playgroud)

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

Order.where(status: [:shipped, :delivered])
Run Code Online (Sandbox Code Playgroud)