为模型创建状态属性

Creating a status attribute for a model

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

你应该使用aasm gem。它具有 aasm_states 模型、回调功能等

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

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

状态映射如下:{ ordered: 0, shipped: 1, delivered: 2}

它还创建范围和 "interrogation methods"。

order.shipped?
Order.delivered.all

它还会在使用散列参数编写查询时映射枚举值:

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