gpt4 book ai didi

ruby-on-rails - 模型中某些 Action 的验证

转载 作者:行者123 更新时间:2023-12-01 07:00:59 25 4
gpt4 key购买 nike

我遇到了一个我以前从未遇到过的问题。我正在处理由另一个程序员编写的代码,它有点困惑。

这是问题所在。我的模型中有以下验证:

validates_presence_of :subscription_level,
:message => 'please make a selection'
validates_presence_of :shipping_first_name
validates_presence_of :shipping_last_name
validates_presence_of :shipping_address
validates_presence_of :shipping_city
validates_presence_of :shipping_state
validates_presence_of :shipping_postal_code
validates_presence_of :shipping_country
validates_presence_of :billing_first_name
validates_presence_of :billing_last_name
validates_presence_of :billing_address
validates_presence_of :billing_city
validates_presence_of :billing_state
validates_presence_of :billing_postal_code
validates_presence_of :billing_country
validates_presence_of :card_number
validates_numericality_of :card_number
validates_presence_of :card_expiration_month
validates_numericality_of :card_expiration_month
validates_presence_of :card_expiration_year
validates_numericality_of :card_expiration_year
validates_presence_of :card_cvv
validates_numericality_of :card_cvv

我对相关 Controller 有两个操作。一个是 new另一个是 redeem .
我想用 new 执行所有这些验证行动但想跳过其中大部分 redeem行动。

我现在面临的问题是使用 valid?在 Controller 中也验证了 redeem 不需要的东西行动。

我怎样才能解决这个问题?

最佳答案

这很hacky,但我不得不求助于一个可以在某些状态下启用/禁用验证的属性标志。 (我的具体例子是一个多页表单,我们最终想要验证一个对象的所有必填字段,但我们只能验证之前页面上提交的数据)

下面是一个示例:

class Whatever < ActiveRecord::Base
attr_accessor :enable_strict_validation

validates_presence_of :name # this always happens
validates_uniqueness_of :name, :if => :enable_strict_validation
end

然后在其他地方(例如您的 Controller ),您可以执行以下操作:
@whatever = Whatever.new(...)
@whatever.save # <= will only run the first validation

@whatever.enable_strict_validation = true
@whatever.save # <= will run both validations

关于ruby-on-rails - 模型中某些 Action 的验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6471343/

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