Czy mógłbyś szczegółowo wyjaśnić, czym są wywołania zwrotne :before_savei :before_createRuby on Rails i co mają wspólnego z sprawdzaniem poprawności Rails? Czy sprawdzanie poprawności następuje po :before_saveczy :before_create?
Czy mógłbyś szczegółowo wyjaśnić, czym są wywołania zwrotne :before_savei :before_createRuby on Rails i co mają wspólnego z sprawdzaniem poprawności Rails? Czy sprawdzanie poprawności następuje po :before_saveczy :before_create?
Odpowiedzi:
W operacji tworzenia w Railsach jest sześć wywołań zwrotnych przed operacją bazy danych i dwa po niej. W kolejności są to:
before_validationbefore_validation_on_createafter_validationafter_validation_on_createbefore_savebefore_create
after_createafter_saveOperacje aktualizacji mają dokładnie ten sam zestaw, z wyjątkiem odczytu updatezamiast createwszędzie (i UPDATE zamiast INSERT ).
Z tego widać, że walidacja jest przeprowadzane przed before_savei before_createwywołania zwrotne.
before_saveWystępuje nieznacznie przed before_create. Według mojej najlepszej wiedzy między nimi nic się nie dzieje; ale before_savebędzie też strzelał podczas operacji Aktualizacji, podczas gdy before_createbędzie strzelał tylko dla Creates.
after_savelub after_create?
after_savelub after_createcallback, selfto zapis, który właśnie został zapisany, ponieważ istnieje po zapisaniu. Że zawiera wygenerowany automatycznie dziedzinach jak id, created_at, updated_at.
before_createodnosi się do nowego obiektu zapisywanego w bazie danych, a nie do createwywoływanej metody. W ten sposób before_createmożna nadal zwolnić nawet z savemetody.
before_save3. i before_create5. pozycję.
before_savejest wywoływany za każdym razem, gdy obiekt jest zapisywany. Tak dla nowych i istniejących obiektów. (utwórz i zaktualizuj akcję)
before_createtylko przed stworzeniem. Więc tylko dla nowych obiektów (utwórz akcję)
before_create vs before_save :on => :create
Czasami musisz uważać na kolejność oddzwaniania
Zobacz tutaj po więcej szczegółów:
http://pivotallabs.com/activerecord-callbacks-autosave-before-this-and-that-etc/
before_save :on => :createnie działa (przynajmniej na torach 3.2)
before_save :generate_api_key, :if => :new_record?
before_validation_on_createiafter_validation_on_createsą usuwane od wersji 3 , zamiast tego użyjbefore_validationiafter_validationodpowiednio z opcją:on => :create.