2011-02-10 78 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

这些值将不会再次验证。验证只会发生一次,否则只要您更改了值,最终都会出现循环条件。

相关问题