ActiveModel :: Validation 3个字段中的任何一个

时间:2016-02-03 18:25:06

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

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

请尝试以下操作。

validate :attributes_presence 

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

答案 2 :(得分:0)

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

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? }