Rusrails visszahívások aktív rekord

Aktív Rekord visszahívások

Ez az útmutató megtanít, hogy vegyenek részt az életciklus az Active Record tárgyakat.

Az útmutató elolvasása után, tanulni fog:







  • Körülbelül életciklusának Active Record tárgyak
  • Hogyan hozzunk létre visszahívások módszerek reagál az eseményekre életciklusában az objektum
  • Hogyan hozzunk létre saját osztályokat, hogy magukba a normális viselkedés a visszahívások

1. Az életciklus a tárgy

Ennek eredményeként, a szokásos műveleteket a Rails alkalmazás, tárgyakat lehet létrehozni, frissíteni és törölni. Aktív Rekord lehetővé teszi, hogy beavatkozzon az életciklus egy tárgy, így szabályozhatja a jelentkezését, és annak adatait.

Érvényesítés lehetővé teszi, hogy csak az érvényes adatokat tárolja az adatbázisban. Visszahívások lehetővé teszi, hogy kapcsolja be a logika előtt vagy után állapotának megváltoztatásával az objektumot.

2. Áttekintés visszahívások

Visszahívások olyan módszerek, amelyek az úgynevezett speciális pontjain életciklusa az objektum. A visszahívások lehet kódot írni, hogy futni fog, ha az Active Record objektum jön létre, karbantartott, frissített, törölt vagy érvényesítik van betöltve az adatbázisból.

2.1. Regisztráció visszahívások

Annak érdekében, hogy a rendelkezésre álló callback, akkor regisztrálnia kell. Akkor végre visszahívókat hagyományos módszerekkel, majd az osztály makro módszereit nyilvántartásba vételének visszahívások.

Macro-osztály módszerek is kap egy blokkot. Ezeket fel lehet használni, ha a kód blokkon belül olyan rövid, hogy elférjen egy sorban.

Callback is regisztrálható, hogy végre bizonyos események az életciklus:

Jó gyakorlat, hogy állapítsa meg visszahívások módszerek magán. Ha nem nyilvános, akkor nevezhetjük kívülről a modell, és sérti az elveit tokozás létesítmény.

3. A rendelkezésre álló visszahívások

Itt megtalálja az összes rendelkezésre álló Active Record visszahívások, abban a sorrendben, amelyben ezek az úgynevezett során a megfelelő műveleteket:

3.1. objektum létrehozása

  • before_validation
  • after_validation
  • before_save
  • around_save
  • before_create
  • around_create
  • after_create
  • after_save
  • after_commit / after_rollback

3.2. frissítés objektum

  • before_validation
  • after_validation
  • before_save
  • around_save
  • before_update
  • around_update
  • after_update
  • after_save
  • after_commit / after_rollback

3.3. megsemmisítése a tárgy

  • before_destroy
  • around_destroy
  • after_destroy
  • after_commit / after_rollback

after_save kezdődik, amikor létrehozása és frissítése, de mindig miután a konkrétabb visszahívások after_create és after_update. függetlenül attól, hogy milyen sorrendben futnak a makro-hívásokat.

Before_destroy visszahívás elé kell helyezni, a linkeket függő. elpusztítani (vagy használja a betoldott opció: true), annak érdekében, hogy azok előtt végrehajtott bejegyzéseket el kell hagyni a függő. elpusztítani.

3.4. after_initialize és after_find

After_initialize visszahívás lefut, valahányszor van egy példánya Active Record tárgy, vagy közvetlenül az új. vagy ha egy rekord van betöltve az adatbázisból. Hasznos lehet, hogy ne kelljen közvetlenül felülírja eljárás Active Record inicializáló.

After_find visszahívási fogják hívni, ha az Active Record betölt egy rekordot az adatbázisból. after_find úgynevezett előtt after_initialize. ha mind meg vannak határozva.

At visszahívások after_initialize és after_find Single before_ *. de lehet regisztrálni, mint bármely más Active Record visszahívások.

3.5. after_touch

After_touch visszahívási fogják hívni, ha az Active Record tárgy neve touch.

Ezt fel lehet használni együtt belongs_to:

4. Run visszahívások

A következő módszerek kiváltó visszahívók:

Továbbá, a visszahívás after_find fut a következő keresési módszerek:

Visszahívás after_initialize fut, amikor egy új objektum inicializálja osztályban.







find_by_ módszerek * és * find_by_! Ez a dinamikus keresési módszereket automatikusan generálja minden attribútum. Bővebben látják Dinamikus keresési

5. átugrása visszahívások

Mint érvényesítés, az is lehetséges, hogy kihagyja visszahívások az alábbi módszerek alkalmazásával.

  • fogás
  • decrement_counter
  • töröl
  • teljes törlés
  • növekedés
  • increment_counter
  • pecek
  • érintés
  • update_column
  • update_columns
  • update_all
  • update_counters

Azonban ezek a módszerek csak óvatosan alkalmazható, mert fontos üzleti szabályok és alkalmazási logikát tartható visszahívások. Át őket anélkül, hogy tisztában legyenek a lehetséges következmények vezethet érvénytelen adatok.

6. Ólom megszakítása

Miután regisztrálta az új visszahívások a saját modellek lesznek váró végrehajtását. Ez sora tartalmazza az összes modellérvényesítés, visszahívások regisztrált és adatbázis-műveletek elvégzésére.

A teljes lánc visszahívók csomagolva működését. Ha bármely visszahívás kivételt dob ​​által végrehajtott lánc megszakad, és elkezdett ROLLBACK. Szándékosan leállítani a láncot használja:

Hívás önkényes kivétel eltörhet kódot, ami azt sugallja, hogy a mentés és a hasonló, nem hogy nem ezen a módon. Kivétel ActiveRecord :: visszagörgetéssel kicsit pontosabb mondja Active Record, hogy van egy rollback. Ő felvette a belsejében, de nem perevyzyvaet kivétel.

Bármely kivétel eltérő ActiveRecord :: visszaállítása vagy ActiveRecord :: RecordInvalid. Sínek perevyzvano után megszakított lánc visszahívók. Hívjon kivételtől eltérő ActiveRecord :: visszaállítása vagy ActiveRecord :: RecordInvalid. megtörni a kódot, ami nem számít, hogy a módszerek, mint például a mentéshez és update_attributes (ami általában megpróbál visszatérni igaz vagy hamis) hatására kivétel.

7. visszahívások kapcsolatokért

Visszahívások dolgozni közötti kapcsolat modell, és nem is lehet meghatározni őket. Példákat, ahol a felhasználó egy csomó cikket. Felhasználó cikket meg kell semmisíteni, ha a felhasználó megsemmisül. Adjunk visszahívás a Felhasználó modell after_destroy keresztül kapcsolatát a modell cikk.

8. Előre nem visszahívások

Mint kidolgozása, talán egy hívást visszahívási eljárás feltétele, attól függően, hogy a megadott feltételnek. Ez úgy történik, hogy a lehetőségek: ha és ha ki nem. amely eltarthat egy szimbólum, Proc vagy egy tömb. Opció: ha kell, használja, hogy meghatározza azokat a feltételeket, amelyek mellett a visszahívás kell hívni. Ha azt szeretnénk, hogy meghatározza azokat a feltételeket, amelyek mellett a visszahívás nem nevezhető, használja a lehetőséget: ha nem.

8.1. Használata: amennyiben: hacsak a szimbólummal

Opciók: és ha: ha nem tud társítani a megfelelő jelkép a nevét egy állítmány módszer, amely nevezhető előtt közvetlenül hívja a visszahívás. Ha a lehetőség: ha. a visszahívás nem kerül sor, ha az alapul szolgáló eljárás visszatér false; használja a lehetőséget: ha nem. a visszahívás nem kerül sor, ha az alapul szolgáló eljárás visszatér igaz. Ez a leggyakoribb megoldás. Ha ezt a regisztrációt, az is lehetséges, hogy regisztrálja különböző állítmányoknak fogják hívni, hogy ellenőrizze a start visszahívás.

8.2. Használata: amennyiben: hacsak a Proc

Végül az is lehetséges, hogy társítani: amennyiben: hacsak a tárgy Proc. Ez a lehetőség a legalkalmasabb írásakor rövid módszerekkel, általában egysoros.

8.3. Vegyület feltételei visszahívók

9. visszahívások osztályok

Néha visszahívások módszerek írtál hasznos ahhoz, hogy újra használható a többi modell. Aktív Rekord lehetővé teszi, hogy hozzon létre osztályok, beleértve a visszahívás módszerek, így válik nagyon könnyű újra őket.

Íme egy példa, ahol létrehoz egy osztály after_destroy PictureFile visszahívások a modell:

Ha a visszahívási eljárás nyilvánították Ezáltal nincs szükség egy példányának létrehozásához az objektum PictureFileCallbacks.

Belül visszahívási osztály, akkor tetszőleges számú visszahívások.

10. Tranzakciós visszahívások

Két további visszahívás, amely magában foglalta a befejezése egy adatbázis-tranzakció: after_commit és after_rollback. Ezek visszahívások nagyon hasonlóak a visszahívás after_save. azzal az eltéréssel, hogy nem indul el, amíg a változásokat az adatbázisba nem erősítik, vagy átalakítható. Ezek a leghasznosabb, ha az Active Rögzítse a modell, akkor kell, hogy kölcsönhatásba lépnek a külső rendszerek, amelyek nem részei egy adatbázis-tranzakció.

Vegyük például az előző példában, ahol a modellek PictureFile kell törölni a fájlt, miután a rögzítési megsemmisül. Ha valami kivételt dob ​​után a visszahívás hívták after_destroy. és a tranzakciót visszaállítják, a fájl törlődik, és a modell marad inkonzisztens állapotban. Tegyük fel például, hogy picture_file_2 az alábbi kód nem érvényes, és az eljárás le! hibát okoznak.

Használata visszahívás after_commit. akkor úgy ebben az esetben.

Opció: a meghatározza, hogy a visszahívási indul. Ha nem adja meg a lehetőséget: a. A visszahívási indul minden parancshoz.

Mivel ezúttal egy visszahívást after_commit csak létrehozása, frissítése vagy törlése, van becenevek ezeket a műveleteket:

  • after_create_commit
  • after_update_commit
  • after_destroy_commit

Visszahívások after_commit after_rollback és felszólított minden teremtett, frissítésre vagy törlésre belül a tranzakció blokk modelleket. Ha azonban kivételt hivatkoznak egy ilyen visszahívások, ez a kivétel felbukkan, és minden maradék módszerek after_commit vagy after_rollback nem teljesülnek. Sőt, ha a callback kód egy kivételt, szükség van rá, hogy hívja a mentés, és kezelje azt a visszahívás, hogy kezdeni egy másik visszahívás.

Amikor használja mind after_create_commit és after_update_commit egy és ugyanazt a modellt csak Visszahívások meghatározott utolsó, felülírva az összes többi.

A regisztrációhoz visszahívások mindkét létre, és a frissítés művelet használja after_commit.