Rails: создание или обновление при сохранении модели - PullRequest
1 голос
/ 15 января 2011

У меня есть модель (Закладка) с двумя полями, назовите их A и B. При создании новой модели я должен выполнить довольно сложную проверку B и, если true обновить закладку в базе данных (настройка Aпереданному) и прервите создание, если false просто сохраните его и создайте новую закладку.

Поэтому я установил фильтр before_create.Проблема с вызванной функцией заключается в том, что если я выполню update_attributes для извлеченного из него объекта, а затем верну false (для отмены сохранения), обновление не будет выполнено (по какой-то причине я не знаю).

update_attributes возвращает true и ошибок нет, но в журнале я вижу только

SQL (0.2ms) 

Если я не возвращаю false, запись корректно обновляется, но также вставляется новая запись(а я этого не хочу).Любая помощь?

Ответы [ 2 ]

1 голос
/ 15 января 2011

Отмена обратных вызовов

Если обратный вызов before_ * возвращает false, все последующие обратные вызовы и связанное с ними действие отменяются. Если обратный вызов after_ * возвращает false, все последующие обратные вызовы отменяются. Обратные вызовы обычно выполняются в порядке, в котором они определены, за исключением обратных вызовов, определенных как методы в модели, которые называются последними.

http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html

0 голосов
/ 15 января 2011

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

Меня это тоже неожиданно укусило. Я думаю, что источник этого был от rails api, в одной строке, или пост в блоге, который ускользает от меня сейчас, извините.

Этот сложный вызов не является проверкой?

Или, может быть, вы можете извлечь update_attribute и использовать его после сложной логики?

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