【问题标题】:ActiveModel::Validation Any of 3 fieldsActiveModel::Validation 3 个字段中的任何一个
【发布时间】:2016-02-03 18:25:06
【问题描述】:

我的模型中有 3 个字段,我需要其中至少一个存在 - 如何使用内置验证来做到这一点?

【问题讨论】:

  • 请编辑您的问题以包含您目前编写的代码。
  • 您需要添加自己的验证。这个用例不是开箱即用的。
  • 您询问过内置验证,但您选择的答案与此完全不符

标签: ruby-on-rails ruby validation ruby-on-rails-4


【解决方案1】:

创建自定义验证:

validate :one_of_three

def one_of_three
  errors.add(:base, 'Must have one of foo, bar or wee') unless foo || bar || wee
end

【讨论】:

    【解决方案2】:

    试试下面的。

    validate :attributes_presence 
    
    def attributes_presence
      errors.add(:base, 'At least one attribute must be present') if attr1.blank? &&  attr2.blank? && attr3.blank?
    end
    

    【讨论】:

      【解决方案3】:

      有一种方法可以根据另一个属性的存在有条件地验证一个属性的存在:

      validates :attr_1,
        presence: true,
        if: ->(model) { model.attr_2.blank? && model.attr_3.blank? }
      validates :attr_2,
        presence: true,
        if: ->(model) { model.attr_1.blank? && model.attr_3.blank? }
      validates :attr_3,
        presence: true,
        if: ->(model) { model.attr_1.blank? && model.attr_2.blank? }
      

      【讨论】:

        猜你喜欢
        • 2015-09-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多