Что выполняется первым? - PullRequest
       13

Что выполняется первым?

1 голос
/ 10 февраля 2011

В моем приложении rails у меня есть модель User.

В этой модели у меня есть некоторая пользовательская проверка и блок перед сохранением, как показано ниже

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 первым или validate.Потому что существуют другие проверки, основанные на роли пользователя.Таким образом, если сначала выполняется блок validate и ошибок валидации нет, а затем выполняется сохранение перед изменением и изменяются значения.Эти значения снова подтверждены?

Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 10 февраля 2011

Проверки вызываются до обратных вызовов 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 голосов
/ 10 февраля 2011

Это руководство, которое вам нужно: http://guides.rubyonrails.org/active_record_validations_callbacks.html

Исходя из раздела 10, похоже, что проверка происходит в первую очередь.

Не думаю, что значения будут проверены снова -нет ничего, что могло бы вызвать это.

0 голосов
/ 10 февраля 2011

Эти значения не будут подтверждены снова.Проверка выполняется один раз, как и при сохранении, в противном случае вы можете оказаться в цикле в любое время, когда изменили значение.

...