Не могли б ви детально пояснити, що таке зворотні виклики :before_save
і :before_create
Ruby on Rails, і що вони мають відношення до перевірки Rails? Чи відбувається перевірка після :before_save
або :before_create
?
Не могли б ви детально пояснити, що таке зворотні виклики :before_save
і :before_create
Ruby on 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
скрізь (і ОНОВЛЕННЯ замість INSERT ).
З цього ви бачите, що перевірка проводиться перед зворотними before_save
і before_create
зворотними дзвінками.
before_save
Злегка відбувається до before_create
. Наскільки мені відомо, між ними нічого не відбувається; але before_save
також буде запущено на Оновленнях операцій, в той час як before_create
буде запускатись лише на Creates.
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
.