2015-09-20 48 views
1

我對我的一個模型有以下驗證。目標是驗證first_name,last_name和shop的存在。然後(但仍然在驗證之前),我想運行我的自定義驗證:狀態。Rails驗證和自定義回調訂購

validates_presence_of :first_name 
    validates_presence_of :last_name 
    validates_presence_of :shop 

    validate :status, :on => :create 

def status 
    do stuff with first_name and last_name 
end 

但似乎:狀態其它驗證之前運行,所以我得到了零FIRST_NAME等我怎樣才能糾正這個錯誤?

+0

爲什麼你需要按順序運行它們? FWIW Rails每次運行所有驗證,即使已經失敗。 – eirikir

+0

before_create可能會對您有所幫助。 – rakeshp

回答

1

如果你不想讓你的自定義驗證運行,如果其他驗證已經回來爲無效,這樣做:

def status 
    return if errors.present? 
    do stuff with first_name and last_name 
end 
+0

繁榮。正是我需要的,謝謝 –

0

我會盡力幫助你。如果status是您的表中的字段,則必須更改自定義驗證名稱。例如

validates_presence_of :first_name 
validates_presence_of :last_name 
validates_presence_of :shop 

validate :check_status, :on => :create 

def check_status 
    if first_name.present? && last_name.present? && shop.present? 
    do stuff with first_name and last_name 
    errors.add(:status, "you message here.") // if you need a error message 
    end 
end 

欲瞭解更多信息custom validation。希望它能幫助你