【问题标题】:Creating a status attribute for a model为模型创建状态属性
【发布时间】:2015-06-21 12:12:37
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    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])
    

    【讨论】:

    • 但是根据您的使用情况,您可能希望升级到使用@nesiseka 推荐的实际状态机。
    • status 可能会保存为默认值为0 的整数,对吗?
    • +1 用于使用简单的 emum。避免在太多事情上使用太多 gem 可以让你的项目保持简单、干净和独立。
    • @CarlEdwards 取决于您要管理多少模型状态,以及状态之间的转换有多复杂。如果您的逻辑很简单,请坚持简单的事情
    • 我想在这种情况下我会使用枚举。谢谢!
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-12
      • 1970-01-01
      • 2022-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-27
      • 1970-01-01
      相关资源
      最近更新 更多