【发布时间】:2013-08-21 09:00:49
【问题描述】:
我有一个具有以下三个属性的 ActiveRecord 模型:
data_1
data_2
data_3
我如何编写一个验证来检查这些字段中的至少一个是否不是 blank?
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 validation activerecord model
我有一个具有以下三个属性的 ActiveRecord 模型:
data_1
data_2
data_3
我如何编写一个验证来检查这些字段中的至少一个是否不是 blank?
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 validation activerecord model
这可以通过像这样的自定义验证器来完成,
在你的模型中写,
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
【讨论】:
好的。这是我的做法
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
【讨论】:
您可以使用属性列表和集合#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
【讨论】: