【问题标题】:Updating enum in Rails ActiveRecord model by end user最终用户更新 Rails ActiveRecord 模型中的枚举
【发布时间】:2014-10-03 20:54:34
【问题描述】:

在以下场景中寻找最佳策略。

考虑具有状态的模型 Order 的 Rails 4 在线商店应用程序

class Order 
  enum status: [ :placed, :processed, :shipped ]
end

我们将应用程序发送给客户,一个月后他们回复我们说想要再添加一个状态 - 延期交货。我们进去更新代码/测试/部署。

class Order 
  enum status: [ :placed, :processed, :shipped, :backordered ]
end

几个月后,他们又回来了,想要一个状态 - :work_in_progress 。等等

过去,我们通过聚合模型 - 状态 - 这将是一个 STI 模型并包含类似的东西来避免这个问题

OrderStatus < Status  

CustomerStatus < Status  

这使得客户添加状态或更改状态名称是微不足道的,但它会导致较慢的 SQL 查找和繁琐的连接,尤其是在复杂的查询中。

所以我想知道是否有处理这个问题的好策略?现在我们有两个的组合——在我们认为客户不会想要添加/删除状态的模型上——我们保留它枚举,否则我们将属于某种状态/类别模型。

【问题讨论】:

    标签: ruby-on-rails ruby activerecord ruby-on-rails-4 enums


    【解决方案1】:

    一个月后,他们回复我们说想要再添加一个 状态

    更改一行代码,即使每月发生一次,也不应该是痛苦的经历。你已经有了最好的策略:当客户要求改变时,咬紧牙关,添加新价值,测试和部署。如果这太繁重,我会说问题出在部署过程而不是客户上。

    经过几轮这样的处理,客户将用尽新的价值来添加并继续处理其他烦人的请求。

    【讨论】:

    • :-) 我想我太具体了。假设您正在创建一个开源 Rails 商店应用程序,它将被数百名用户使用。或者您的客户不想因为每件小事都回来找您。在这种情况下,我更像是一个程序员而不是一个人——我宁愿不与客户打交道,因为像添加新身份这样微不足道的事情。我的直觉是必须有更好的方法。没有?
    • 很公平。如果更改频繁或大量,您的替代方法是我将使用的方法。我在这里没有看到任何灵丹妙药:您将枚举的简单性换成了更复杂的模型关联,并且需要验证/清理用户输入。
    • 这是我得出的合乎逻辑的结论。我想我的直觉是错误的。 :-) 只是想检查一下。我会把它打开几天,如果没有人提出更好的建议,就会将其标记为已回答。谢谢 zetetic
    • 为了后代:我最终采用了混合方法,有些被定义为枚举,有些被定义在数据库中。
    猜你喜欢
    • 2021-09-29
    • 1970-01-01
    • 2022-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-13
    • 1970-01-01
    相关资源
    最近更新 更多