我想在某些情況下在我的Rails模型中捕獲和移除方法調用。有沒有辦法在Rails中移除方法調用?
我喜歡remove_method
之類的東西,但是它會刪除方法調用。
例如,如果我在模型中有before_save
回調,我可能希望使用擴展到類中的模塊來捕獲它,並刪除或防止before_save
發射。
這可能嗎?
謝謝。
我想在某些情況下在我的Rails模型中捕獲和移除方法調用。有沒有辦法在Rails中移除方法調用?
我喜歡remove_method
之類的東西,但是它會刪除方法調用。
例如,如果我在模型中有before_save
回調,我可能希望使用擴展到類中的模塊來捕獲它,並刪除或防止before_save
發射。
這可能嗎?
謝謝。
您是否嘗試過清除before_save
這樣的:
before_save ->{}
編輯:
透水答案我張貼不工作 - 不知道這是否做過,但我用依稀記得在過去。例如,要跳過回調,在子類的上下文中,應該使用skip_callback
。用法示例:
skip_callback :save, :before, :callback_method_name
或者,如果你想跳過回調下一個特定條件:
skip_callback :save, :before, :callback_method_name, if: :some_condition_true?
還有一個reset_callbacks
方法,它回調類型作爲參數。例如,reset_callbacks :save
。回調可以通過類方法_save_callbacks
,_create_callbacks
等訪問。我使用reset_callbacks
時要小心,因爲看起來Rails本身正在爲關聯定義回調,即:before_save_collection_association
。
如果你只是談論普通的Ruby對象,你可以覆蓋子類中的方法。只要定義一個與超類同名的方法即可。您還可以通過包含一個與基類定義相同實例方法的模塊來覆蓋子類中的基類方法。
在什麼情況下你可以使用這個?我很好奇 – MrYoshiji
看到我更新的答案。對困惑感到抱歉。 –
這對Rails回調很有用,但是對於Ruby方法呢。驗證,包括等等。所有這些都是方法調用。我想勾選其中的任何一個。有辦法嗎? – Nathan