《Rails-Guides》Reading notes four:Active Record Callbacks

回調(diào)概述

????????在 Rails 應用正常運作期間,對象可以被創(chuàng)建、更新或刪除。Active Record 為對象的生命周期提供了鉤子,使我們可以控制應用及其數(shù)據(jù)。

????????回調(diào)使我們可以在對象狀態(tài)更改之前或之后觸發(fā)邏輯。

????????回調(diào)是在對象生命周期的某些時刻被調(diào)用的方法。通過回調(diào),我們可以編寫在創(chuàng)建、保存、更新、刪除、驗證或從數(shù)據(jù)庫中加載 Active Record 對象時執(zhí)行的代碼。

????????回調(diào)在使用之前需要注冊。我們可以先把回調(diào)定義為普通方法,然后使用宏式類方法把這些普通方法注冊為回調(diào):

可用的回調(diào)

????????下面按照回調(diào)在 Rails 應用正常運作期間被調(diào)用的順序,列出所有可用的 Active Record 回調(diào)。

創(chuàng)建對象

更新對象

刪除對象

after_initialize?和?after_find?回調(diào)

? ??????當 Active Record 對象被實例化時,不管是通過直接使用?new?方法還是從數(shù)據(jù)庫加載記錄,都會調(diào)用?after_initialize?回調(diào)。使用這個回調(diào)可以避免直接覆蓋 Active Record 的?initialize?方法。

????????當 Active Record 從數(shù)據(jù)庫中加載記錄時,會調(diào)用?after_find?回調(diào)。如果同時定義了?after_initialize?和?after_find?回調(diào),會先調(diào)用?after_find?回調(diào)。

????????after_initialize?和?after_find?回調(diào)沒有對應的?before_*?回調(diào),這兩個回調(diào)的注冊方式和其他 Active Record 回調(diào)一樣。

調(diào)用回調(diào)

????????下面這些方法會觸發(fā)回調(diào):

????????下面這些查找方法會觸發(fā)?after_find?回調(diào):

????????每次初始化類的新對象時都會觸發(fā)?after_initialize?回調(diào)。

? ??????和驗證一樣,我們可以跳過回調(diào)。使用下面這些方法可以跳過回調(diào):慎重地使用這些方法,因為有些回調(diào)包含了重要的業(yè)務規(guī)則和應用邏輯,在不了解潛在影響的情況下就跳過回調(diào),可能導致無效數(shù)據(jù)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容