簡體   English   中英

活動記錄驗證 - 互斥屬性

[英]active record validations - mutually exclusive attributes

我想驗證我的模型中的屬性,如果一個屬性存在,另一個不應該存在。 假設有 2 個屬性 -

if a present:
  b should be NULL
  c should be NULL

我如何使用驗證來做到這一點?

:validates a, b => NULL, c => NULL

您可以使用自定義驗證:

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

我發現將:absenceif:一起使用很可讀if:像這樣:

validates :b, :absence, if: :a
validates :c, :absence, if: :a

或者,如果您還希望abc完全互斥:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM