什么先执行?

时间:2011-02-10 05:40:43

标签: ruby-on-rails validation save

在我的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执行并修改值。这些值是否再次得到验证?

先谢谢。

3 个答案:

答案 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节,看起来好像首先发生验证。

我不认为这些价值会再次得到验证 - 没有什么会导致这种情况发生。