我有一个ActiveRecord模型,它具有以下三个属性:
data_1
data_2
data_3
如何编写验证,检查其中至少有一个字段不 blank?
答案 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