Не могли бы вы подробно объяснить, что такое обратные вызовы Ruby :before_saveи :before_createRails и как они связаны с валидациями Rails? Проверка происходит после :before_saveили :before_create?
Не могли бы вы подробно объяснить, что такое обратные вызовы Ruby :before_saveи :before_createRails и как они связаны с валидациями Rails? Проверка происходит после :before_saveили :before_create?
Ответы:
В операции создания в Rails существует шесть обратных вызовов до операции базы данных и два после. По порядку это:
before_validationbefore_validation_on_createafter_validationafter_validation_on_createbefore_savebefore_create
after_createafter_saveОперации обновления имеют точно такой же набор, за исключением чтения updateвместо createвезде (и ОБНОВЛЕНИЕ вместо ВСТАВКИ ).
Исходя из этого, вы можете увидеть , что проверка проводится до before_saveи before_createобратных вызовов.
before_saveСлегка происходит до before_create. Насколько я знаю, между ними ничего не происходит; но before_saveтакже срабатывает при операциях обновления, а before_createсрабатывает только при создании.
after_saveили after_create?
after_saveили after_createобратного вызова, selfявляется запись , которая была только что сохранили, как она существует после сохранения. Это включает в себя автогенерируемые областях , как id, created_at, updated_at.
before_createчто новый объект сохраняется в базе данных, а не фактический createвызываемый метод. Таким образом, before_createвсе еще можно уволить даже из saveметода.
before_save3-й и before_create5-й.
before_saveвызывается каждый раз, когда объект сохраняется. Так что для новых и существующих объектов. (создать и обновить действие)
before_createтолько до создания. Так что только для новых объектов (создать действие)
before_create против before_save :on => :create
Иногда вы должны быть осторожны с порядком обратных вызовов
Смотрите здесь для получения более подробной информации:
http://pivotallabs.com/activerecord-callbacks-autosave-before-this-and-that-etc/
before_save :on => :createне работает (по крайней мере, на рельсах 3.2)
before_save :generate_api_key, :if => :new_record?
before_validation_on_createиafter_validation_on_createудаляются с Rails 3 вместо использованияbefore_validationиafter_validationсоответственно с опцией:on => :create.