0
在Rails中,我使用了很多模型,它們具有自定義方法,如create_new!
,它們替換內置方法(通常用於包裝附加功能而不必使用過濾器,我試圖避免)。因此,我想禁用(或更優雅地說,使私人)一些方法,如create
或save
。有沒有可能使某些方法私人化,沒有任何討厭的副作用?ActiveRecord:禁用某些方法,如'保存'或將它們設爲私有
在Rails中,我使用了很多模型,它們具有自定義方法,如create_new!
,它們替換內置方法(通常用於包裝附加功能而不必使用過濾器,我試圖避免)。因此,我想禁用(或更優雅地說,使私人)一些方法,如create
或save
。有沒有可能使某些方法私人化,沒有任何討厭的副作用?ActiveRecord:禁用某些方法,如'保存'或將它們設爲私有
您可以使用alias_method函數重新命名要混淆的方法,然後重新定義該方法以引發錯誤或異常。例如,
alias_method :save_private, :save
def save(*)
ActiveSupport::Deprecation.warn("Method is deprecated and disabled, please use save_new")
false
end
在他之後,如何使用'save_private'方法實際保存對象? – juliangonzalez
關鍵字private和protected – Neeraj
當然,但我不確定覆蓋這些方法是否帶有不必要的副作用。 – Remo
基於HTTP動詞和URL模式,這些方法被自動調用,GET/new爲new,GET/id/edit爲編輯,DELETE爲destroy,PUT爲更新等等。所以,這些方法可用並且公開。自定義私有方法阻止這些方法調用b。要限制某些用戶執行某些操作,請使用像before_filter這樣的自定義私有函數:authenticate_admin:except => [:show]。沒有過濾器,你可以在行動中進行有條件的檢查,但那不會很好。 U也可以在過濾函數之前僅使用一個來執行所有檢查。 – Neeraj