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

Да.

Ортогональные проблемы, как безопасность, лучше всего сделаны с перехватом стиля AOP. Сделано ли это автоматически (через что-то как контейнер внедрения зависимости) или вручную неважно до конца цель.

Один пример: "перед/после того, как" атрибутами в xUnit.net (проект с открытым исходным кодом я работаю) является формой перехвата метода стиля AOP. Вы украшаете свои методы тестирования этими атрибутами, и незадолго до и после того метода тестирования выполнения, Ваш код называют. Это может использоваться для вещей как установка базы данных и откат результатов, изменение контекста защиты в который тестовые прогоны, и т.д.

Другой пример: атрибуты фильтра в ASP.NET MVC также действуют как специализированные перехватчики метода стиля AOP. Один, например, позволяет Вам говорить, как необработанные ошибки нужно рассматривать, если они происходят в Вашем методе действия.

Много контейнеров внедрения зависимости, включая замок Windsor и Единицу, поддерживают это поведение или "в поле" или с помощью расширений.

11
задан kmorris511 31 July 2009 в 17:13
поделиться

2 ответа

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

@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, к которому можно получить доступ, как я сделал в приведенном выше примере. Попробуйте примеры в консоли, чтобы почувствовать это, если хотите.

26
ответ дан 3 December 2019 в 02:52
поделиться

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

dude = Person.new
unless dude.valid?
  # Examine errors
end
4
ответ дан 3 December 2019 в 02:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: