2013-10-18 80 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”子句,继续打开第一个调用它的方法。 –