2011-02-10 75 views
1

在我的Rails應用程序中,我有一個用戶模型。什麼首先執行?

在這個模型中,我有一些自定義的驗證和保存之前塊如下

Class User < AvtiveRecord::Base 
    before_save :save_user 
    validate :validate_user 

    def save_user 
    self.guest = true if(!self.admin? && !self.guest) 
    end 

    def validate_user 
    errors.add(:age, "can't be less than 20") if self.age < 20 
    end 
end 

現在,我只是想知道,驗證塊是否執行第一或驗證。因爲還有其他基於用戶角色的驗證。所以如果validate塊首先執行並且沒有驗證錯誤,然後before save執行並修改這些值。這些值再次驗證了嗎?

在此先感謝。

回答

2

在before_save回調之前調用驗證。如果您希望在驗證之前執行它,那麼您可以使用before_validation_on_create或before_validation_on_update,如下所示:

class User < ActiveRecord::Base 
    before_validation_on_create :save_user 
    validate :validate_user 

    def save_user 
    self.guest = true if(!self.admin? && !self.guest) 
    end 

    def validate_user 
    errors.add(:age, "can't be less than 20") if self.age < 20 
    end 
end 
0

這些值將不會再次驗證。驗證只會發生一次,否則只要您更改了值,最終都會出現循環條件。

相關問題