2009-05-06 57 views
0

在我的應用程序控制器中,我有一種方法應該檢查子類控制器中是否存在另一種方法來設置下載文件的文件名,但我無法正常工作如何檢查rails應用程序控制器中是否存在方法?

i已經試過

def filename 
    begin 
    send "filename_method" 
    rescue NoMethodError 
    default_filename 
    end 
end 

def filename 
if respond_to?("filename_method") 
    send "filename_method" 
else 
    default_filename 
end 
end 

但雙方始終返回default_filename,即使filename_method在子類控制器進行定義。有人可以在這裏指出我正確的方向嗎?

感謝,

-C

回答

2

我猜這是由於控制器超不知道的子類的方法存在。您可以通過檢查子類的methods數組來確認這一點。

看來解決方案是重新考慮你的設計。無需檢查是否存在filename_method,只需在基址filename方法中提供缺省文件名行爲並覆蓋子類中的filename方法以提供自定義文件名功能。

例如,在你的超:

def filename 
    # return default file name 
end 

而在子類:

def filename 
    # return custom file name 
end 
+0

笑,真不錯,我應該首先想到的是,謝謝:) - C – 2009-05-06 17:41:49

相關問題