Не могли б ви детально пояснити, що таке зворотні виклики :before_saveі :before_createRuby on Rails, і що вони мають відношення до перевірки Rails? Чи відбувається перевірка після :before_saveабо :before_create?
Не могли б ви детально пояснити, що таке зворотні виклики :before_saveі :before_createRuby on Rails, і що вони мають відношення до перевірки Rails? Чи відбувається перевірка після :before_saveабо :before_create?
Відповіді:
У операції створення під Rails існує шість зворотних зворотних дзвінків перед операцією з базою даних та два після. Для того, це:
before_validationbefore_validation_on_createafter_validationafter_validation_on_createbefore_savebefore_create
after_createafter_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_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.