gpt4 book ai didi

ruby-on-rails - 在 Rails 中随时间更改业务规则验证

转载 作者:行者123 更新时间:2023-12-03 14:34:23 25 4
gpt4 key购买 nike

有好几次我都遇到过这样的情况,我们有一个带有业务驱动验证的模型,例如:

class Order < ActiveRecord::Base
validates_numericality_of :total, :greater_than => 5.0

# Some more logic
end

在某个时候,老板决定新的最低订单应为 10 美元,因此我们将验证更新为 10。但是,这意味着任何现有的值(value)在 5 美元到 10 美元之间的订单将不再有效,任何逻辑我调用 order.save() 的地方将开始失败(有时令人不快地默默地)。我在一个大型的 Rails 应用程序中遇到过很多次,但还没有找到好的解决方案。一些想法:

  1. 确保在推出代码更改时没有会受到影响的未决“订单”
  2. 添加一个 :if => Proc.new { |o| o.created_at.nil?或 o.created_at > date_new_validation_is_effective } 到新的验证,但肯定这很快就会变得笨拙
  3. 在其他地方“验证”业务规则,例如接受用户指定输入的 Controller ,而不是作为模型验证。但这违反了在 Rails 中有许多支持者的胖模型/瘦 Controller 原则。

是否有不同的方法来整合此逻辑,或者从长远来看保持像 #2 这样的策略可管理?

最佳答案

您可以将此业务逻辑验证设置为仅运行 :on => :create。我假设您不经常编辑/更新订单总数。

这将使它对所有后续订单生效,同时不会影响系统中现有模型的有效性。

关于ruby-on-rails - 在 Rails 中随时间更改业务规则验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14766902/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com