验证至少有几个存在

时间:2013-08-21 09:00:50

标签: ruby-on-rails ruby-on-rails-3 validation activerecord model

我有一个ActiveRecord模型,它具有以下三个属性:

data_1
data_2
data_3

如何编写验证,检查其中至少有一个字段 blank?

3 个答案:

答案 0 :(得分:4)

这可以通过这样的自定义验证器来完成,

在您的模型中写,

 validates :validate_attrlist

 def validate_attrlist
    unless !data_1.blank? or !data_2.blank? or !data_3.blank?
       record.errors[:base] << "Can't be blank"
    end
  end

答案 1 :(得分:0)

确定。我是这样做的

validate :has_content


def has_content
  if data_1.blank? && data_2.blank? && data_3.blank?
    errors[:base] = "Must have a filename or a URL"
  end
end

答案 2 :(得分:0)

您可以使用属性列表和集合#any吗? #所有?方法:

[attr1, attr2, ..., attrN].all? {|a| a.nil? || a == "" }

[attr1, attr2, ..., attrN].map(&:to_s).any? {|a| !a.empty? }

这是普通的Ruby,ActiveSupport它更容易,你有#present吗?或#blank ?,例如:

[attr1, attr2, ..., attrN].any?(&:present?)

最后,对于两个值,您可以使用XOR操作:value1 ^ value2