【问题标题】: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? }