我有一个具有以下三个属性的 ActiveRecord 模型:
data_1
data_2
data_3
如何编写验证来检查这些字段中的至少一个是否不存在 blank?
我有一个具有以下三个属性的 ActiveRecord 模型:
data_1
data_2
data_3
如何编写验证来检查这些字段中的至少一个是否不存在 blank?
这可以通过像这样的自定义验证器来完成,
在你的模型中写,
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