2012-11-22 42 views
1

我有一個基本控制器幹掉了很多我的沼澤標準污染控制器,我的想法是如果我需要做一些非標準的操作,我只會覆蓋每種方法。在紅寶石中覆蓋類方法沒有按預期工作

class MyBaseController < ApplicationController 

    load_and_authorize_resource 

    # Common crud actions 

end 

現在我的孩子控制器之一,我有一個自定義操作(EXPORT_CSV)

class ReportsController < MyBaseController 

    load_and_authorize_resource :except => :export_csv 

    def export_csv 
    # custom auth and other stuff 
    end 

end 

現在我再也不能打我EXPORT_CSV行動,而不是我收到拒絕訪問異常。如果我不從我的基礎控制器繼承,一切都很好。

我認爲如下我也許能解決它:

class MyBaseController < ApplicationController 

    load_and_authorize_resource :except => auth_exceptions 

    def self.auth_exceptions 
    [] 
    end 

    # Common crud actions 

end 

,然後覆蓋在我的子類self.auth_exceptions是必要的。

然而,這觸發錯誤「未定義的局部變量或方法`auth_exceptions'的MyBaseController:類」

沒有人有任何建議選擇覆蓋負載和我的孩子控制器授權的資源?

感謝您的任何幫助。

+0

我認爲這完全不是一個好主意:有些控制器無法表示任何資源,因此您必須修補所有內容。 – apneadiving

+0

在這些情況下,我可以直接從ApplicationController繼承? – Chris

+0

是的,取決於你的期望。希望你不要幹DRY的東西,它會導致昂貴的未來變化 – apneadiving

回答