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