我想验证模型中的属性,以便如果存在其他属性则不应该。假设有2个属性 -
if a present:
b should be NULL
c should be NULL
如何使用验证来执行此操作?
:validates a, b => NULL, c => NULL
答案 0 :(得分:2)
您可以使用自定义验证:
validate :check_presence
def check_presence
if !self.a.blank?
if !self.b.blank? or !self.c.blank?
errors[:base] << " b and c should be null."
end
end
end
答案 1 :(得分:0)
我发现将:absence
与if:
一起使用非常容易阅读:
validates :b, :absence, if: :a
validates :c, :absence, if: :a
或者,如果您还想与a
,b
和c
完全互斥:
validates :a, :absence, if: ->(r) { r.b || r.c }
validates :b, :absence, if: ->(r) { r.a || r.c }
validates :c, :absence, if: ->(r) { r.a || r.b }
或使用一种方法:
validate :ensure_mutual_exclusion
def ensure_mutual_exclusion
errors.add(:base, "...") if [a, b, c].count(&:present?) > 1
end