2013-10-18 110 views
0

我在應用程序中遇到了一些奇怪的錯誤,所有這些錯誤都與請求不存在URL的隨機搜尋器相關,而Rails未能識別這些錯誤。Rails不識別零對象

I.e.履帶請求[公司網址] /local/favicon.ico和下面的代碼沒有認識到它應該呈現404,因爲對象是零,導致應用的第一個方法調用突破:

@local = Local.find_by_slug(params[:c]) 
render_404(RuntimeError.new(request.path)) and return unless @local 

我明白我可以阻止抓取工具的IP,但它看起來不是最好的解決方案。

有沒有人有任何想法如何解決這個使用Rails?

+0

豈不轉讓發生的最後一次? –

+0

@DaveNewton對不起,我沒有得到它。你能擴展嗎? –

+0

在編輯它之前,'@ local'的賦值是在'unless'調用之後發生的。 –

回答

0

在請求字符串中使用句點,然後在params散列中查找它們。句點表示格式,所以在你的例子中params [:c]可能只是favicon,而不是完整的路徑名。

我建議在救援塊中處理這個問題,因爲這個方法看起來很脆弱。

試着這麼做:

begin 
    @local = Local.find_by_slug(params[:c]) 
rescue Exception => e 
    # Choose to do something with e here (email admin etc.) 
    render_404(RuntimeError.new(request.path)) and return 
end 
+0

這不起作用,因爲第一行永不中斷 - 它找不到任何東西,並創建一個nil對象,以某種方式通過「除非@local」子句,繼續打開第一個調用它的方法。 –