Не могли бы вы подробно объяснить, что такое обратные вызовы Ruby :before_save
и :before_create
Rails и как они связаны с валидациями Rails? Проверка происходит после :before_save
или :before_create
?
Не могли бы вы подробно объяснить, что такое обратные вызовы Ruby :before_save
и :before_create
Rails и как они связаны с валидациями Rails? Проверка происходит после :before_save
или :before_create
?
Ответы:
В операции создания в Rails существует шесть обратных вызовов до операции базы данных и два после. По порядку это:
before_validation
before_validation_on_create
after_validation
after_validation_on_create
before_save
before_create
after_create
after_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_save
3-й и before_create
5-й.
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
.