2013-10-07 62 views
0

在Rails中,我使用了很多模型,它們具有自定義方法,如create_new!,它們替換內置方法(通常用於包裝附加功能而不必使用過濾器,我試圖避免)。因此,我想禁用(或更優雅地說,使私人)一些方法,如createsave。有沒有可能使某些方法私人化,沒有任何討厭的副作用?ActiveRecord:禁用某些方法,如'保存'或將它們設爲私有

+0

關鍵字private和protected – Neeraj

+0

當然,但我不確定覆蓋這些方法是否帶有不必要的副作用。 – Remo

+0

基於HTTP動詞和URL模式,這些方法被自動調用,GET/new爲new,GET/id/edit爲編輯,DELETE爲destroy,PUT爲更新等等。所以,這些方法可用並且公開。自定義私有方法阻止這些方法調用b。要限制某些用戶執行某些操作,請使用像before_filter這樣的自定義私有函數:authenticate_admin:except => [:show]。沒有過濾器,你可以在行動中進行有條件的檢查,但那不會很好。 U也可以在過濾函數之前僅使用一個來執行所有檢查。 – Neeraj

回答

0

您可以使用alias_method函數重新命名要混淆的方法,然後重新定義該方法以引發錯誤或異常。例如,

alias_method :save_private, :save 

def save(*) 
    ActiveSupport::Deprecation.warn("Method is deprecated and disabled, please use save_new") 
    false 
end 
+0

在他之後,如何使用'save_private'方法實際保存對象? – juliangonzalez

相關問題