my_object.save (false) ДЕЙСТВИТЕЛЬНО не пропускает проверки моей активной записи - PullRequest
5 голосов
/ 30 марта 2009

Итак, я выдернул свои волосы из-за устранения этой ошибки, и наконец-то обнаружил, что ее вызвало. У меня всегда было впечатление, что когда я звонил

@my_model.save(false)

Что бы я пропустил мои проверки ActiveRecord. Оказывается, это отчасти правда. Мои объекты сохраняются в базе данных DESPITE моя проверка ActiveRecord. Моя проблема существует из-за того, что одна из моих проверок изменяет одну из дочерних моделей во время процесса проверки (Это приложение для планирования на 24 часа, поэтому, когда обеды сохраняются, я проверяю их в соответствии со днем, когда они сохраняются, И на следующий день также, чтобы убедиться, что пользователь не имел в виду «2 часа ночи» для ночной смены.

Мой вопрос таков: есть ли способ фактически пропустить мои проверки и перейти прямо к базе данных? Это нормальное поведение ActiveRecord или я должен углубиться в мои проверки? Или мне не повезло, и мне нужно переписать мои проверки?

Ответы [ 4 ]

12 голосов
/ 30 марта 2009

Моя проблема существует, потому что одна из моих проверок изменяет одну из дочерних моделей во время процесса проверки

Исправьте это, тогда ваши проблемы исчезнут. Валидации никогда не должны изменять объекты!

6 голосов
/ 30 марта 2009

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

Вот документация по обратным вызовам ActiveRecord: http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html

Здесь также есть руководство по использованию обратных вызовов с некоторыми подробностями о том, как их пропустить: http://guides.rubyonrails.org/activerecord_validations_callbacks.html

5 голосов
/ 30 марта 2009

Я согласен, вы должны использовать обратные вызовы для взаимодействия с записями. Валидации никогда не должны изменять объекты ..

Если вы все еще нуждаетесь в этом, используйте

myobject.save_without_validation
3 голосов
/ 30 марта 2009

Я согласен с Орионом, никогда не используйте проверку для изменения объекта, вместо этого используйте обратный вызов, как after_save.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...