Выполнение валидации ActiveRecord без сохранения

У меня есть коллекция объектов ActiveRecord. Я хочу иметь возможность запускать все проверки для каждого из этих объектов, не сохраняя их в базе данных. Я просто хочу знать, будут ли они действительны, если бы я сохранил их в базе данных. Другими словами, я по существу хочу заполнить структуру данных errors для каждого из моих объектов. Есть ли способ сделать это? Или, может быть, я пропустил что-то о жизненном цикле коллекции errors?

Ответ 1

Вы можете сделать следующее, чтобы проверить, действительно ли модель:

@user = User.new
if @user.valid?
  #do things

Если вы хотите узнать, что такое ошибки, вы можете сделать:

@user = User.new
unless @user.valid?
  @user.errors.each {|k, v| puts "#{k.capitalize}: #{v}"}

Вызов ".valid?" метод выполняет ваши проверки, помещая все ваши ошибки в объект ActiveRecord:: Errors, к которому можно получить доступ, как в примере выше. Попробуйте примеры в консоли, чтобы почувствовать это, если хотите.

Ответ 2

Запуск метода #valid? объекта приведет все проверки и заполнит структуру errors.

dude = Person.new
unless dude.valid?
  # Examine errors
end