在我的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
现在,我只是想知道验证块是先执行还是验证。因为还有其他基于用户角色的验证。因此,如果验证块首先执行并且没有验证错误,则之前的save执行并修改值。这些值是否再次得到验证?
先谢谢。
答案 0 :(得分: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
答案 1 :(得分:0)
这些值不会再次验证。验证会像保存一样发生,否则您可能会在更改值时随时处于循环状态。
答案 2 :(得分:0)
这是您想要的指南:http://guides.rubyonrails.org/active_record_validations_callbacks.html
根据第10节,看起来好像首先发生验证。
我不认为这些价值会再次得到验证 - 没有什么会导致这种情况发生。