当我找到一个虚假的网址时:
/帖/ 99999999
在我的本地机器上,我看到了:
ActiveRecord::RecordNotFound in Posts#show
Showing /Users/patrick/rails/my_app/app/views/posts/show.html.haml where line #1 raised:
无法找到ID = 99999的帖子
...日志显示:
Rendered posts/show.html.haml within layouts/application (29.6ms)
Completed in 423ms
ActionView::Template::Error (Couldn't find Post with ID=99999)
---但是,当我在制作中这样做时,我得到了public / 500.html错误页面,而不是404 ...我有点困惑,因为在开发模式下,浏览器显示ActiveRecord :: RecordNotFound(这应该是404,是吗?)但是日志显示了ActionView :: Template :: Error--没有提到ActiveRecord :: RecordNotFound。
所以,最终,我的问题是,我怎样才能把它变成404而不是500呢?而且 - 为什么它是500?
答案 0 :(得分:3)
从我所看到的,Rails应该自动创建一个ActiveRecord :: RecordNotFound呈现404.html页面...我发现的问题是我使用gem decent_exposure,并且由于它的延迟加载性质,它会导致在视图而不是控制器中发生错误,因此Rails不知道渲染404页面,因为它显示为实际的ActionView :: Template :: Error ...
答案 1 :(得分:3)
只需向!
方法添加find_by_column
。
示例:
@post = Post.find_by_id!(params[:id])
然后,抛出RecordNotFound
异常。