1

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

data_1
data_2
data_3

如何编写验证来检查这些字段中的至少一个是否不存在 blank?

4

3 回答 3

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
于 2013-08-21T09:10:46.237 回答
1

行。这是我的做法

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
于 2013-08-21T10:59:19.207 回答
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

于 2017-08-16T19:25:50.697 回答