2016-02-03 75 views
0

我在我的模型中有3個字段,我至少需要其中的一個字段 - 如何使用內置驗證來實現這一點?ActiveModel ::驗證3個字段中的任何一個

+0

請修改您的問題以包含您迄今爲止編寫的代碼。 –

+0

你需要添加你自己的驗證。這個用例沒有開箱。 –

+0

您已經詢問了關於內置驗證的內容,但您選擇的答案與此不符 –

回答

1

創建一個自定義的驗證:

validate :one_of_three 

def one_of_three 
    errors.add(:base, 'Must have one of foo, bar or wee') unless foo || bar || wee 
end 
0

有一種方法有條件驗證取決於另一個存在一個屬性的存在:

validates :attr_1, 
    presence: true, 
    if: ->(model) { model.attr_2.blank? && model.attr_3.blank? } 
validates :attr_2, 
    presence: true, 
    if: ->(model) { model.attr_1.blank? && model.attr_3.blank? } 
validates :attr_3, 
    presence: true, 
    if: ->(model) { model.attr_1.blank? && model.attr_2.blank? } 
1

嘗試以下。

validate :attributes_presence 

def attributes_presence 
    errors.add(:base, 'At least one attribute must be present') if attr1.blank? && attr2.blank? && attr3.blank? 
end