gpt4 book ai didi

ruby-on-rails - 仅当另一个字段为空时才验证字段是否存在 - Rails

转载 作者:行者123 更新时间:2023-12-03 05:52:49 25 4
gpt4 key购买 nike

我有一张包含手机号码和家庭电话号码的表格。

如果电话号码留空,我只想验证手机/手机号码是否存在,反之亦然。

我当前对这些字段的验证如下。

validates_presence_of :mobile_number
validates_presence_of :home_phone

validates_length_of :home_phone, :minimum => 12, :maximum => 12
validates_length_of :mobile_number, :minimum => 10, :maximum => 10, :allow_blank => true

validates_format_of :home_phone, :with => /\A[0-9]{2}\s[0-9]{4}\s[0-9]{4}/, :message => "format should be 02 9999 9999"

我想我可以有类似下面的东西,但不确定如何准确地做到这一点。

validates_presence_of :mobile_number, :unless => :home_phone.blank?

我正在使用 Rails 3。

最佳答案

你不需要 lambda。这会做:

validates_presence_of :mobile_number, :unless => :home_phone?

此外,所有验证器都采用相同的 if/unless 选项,因此您可以随意设置它们的条件。

更新:几天后回顾这个答案,我发现我应该解释为什么它有效:

  • 如果您将验证器的 :unless 选项设置为符号,Rails 将查找该名称的实例方法,并在验证时在正在验证的实例上调用该方法 --并且仅当该方法返回 false 时才执行验证。
  • ActiveRecord 会自动为模型的每个属性创建问号方法,因此模型表中 home_phone 列的存在会导致 Rails 创建一个方便的 #home_phone?方法。当且仅当 home_phone 存在(即不为空)时,此方法返回 true。如果 home_phone 属性为零或空字符串或一堆空格,那么 home_phone?将返回 false。
<小时/>

更新:确认这种旧技术在 Rails 5 中继续有效。

关于ruby-on-rails - 仅当另一个字段为空时才验证字段是否存在 - Rails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6273289/

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