2011-03-17 99 views
4
class Parent 
    has_one :child 
    accepts_nested_attributes_for :child 
end 
class Child 
    belongs_to :parent 
end 

使用嵌套對象表單時,我需要爲子模型添加一些額外的驗證。這些並不總是在Child上運行,所以我不能將它們放在Child中的validate方法中。在Parent中驗證方法中檢查似乎是明智的,但我無法正確添加錯誤消息。嵌套模型上的自定義驗證錯誤

這並不工作:

class Parent 
... 
def validate 
    errors[ :"child.fieldname" ] = "Don't be blank!" 
end 

但是我們失去了美好的東西像I18N和CSS上的錯誤領域突出。

這不起作用:

def validate 
    errors.add :"child.fieldname", :blank 
end 
+0

我最初的想法是始終有子模型的孩子驗證。爲什麼不這樣做? – 2011-03-17 18:45:56

+0

針對不同情況的不同驗證。在我的具體情況下,一些兒童模型是在沒有父母的情況下創建的,而且那些模型比通過父母創建的模型更加寬鬆。 – 2011-03-17 18:58:32

+8

因此,讓他們有條件的父母的存在。你仍然應該把它們放在孩子模型中。 – 2011-03-17 19:45:38

回答

1

你應該讓他們在兒童模特然而,因爲那是一個有效的,你可以設置條件語句與if:unless:

class Order < ActiveRecord::Base 
    validates :card_number, presence: true, if: :paid_with_card? 

    def paid_with_card? 
    payment_type == "card" 
    end 
end 

你可以做了幾個變化,閱讀更多的鐵軌文檔http://edgeguides.rubyonrails.org/active_record_validations.html#conditional-validation

我想你可以添加一個屬性,created_by給孩子,並讓孩子根據那個選擇使用哪種驗證。你可以這樣做,就像他們在這個答案:Rails how to set a temporary variable that's not a database field