【发布时间】:2012-03-31 00:26:54
【问题描述】:
我有以下操作:
def show
@video = @commentable = @favoritable = Video.find_by_key(params[:key])
Video.increment_counter(:views_count, @video.id)
end
但是现在如果find_by_key 没有找到记录,它会抛出RuntimeError (Called id for nil)。
那么,如果找不到记录,我怎样才能让该操作引发 404?
我正在运行 Rails 3.2.1。
【问题讨论】:
-
找不到记录的 404?相当用户敌对。
-
@DaveNewton 怎么样?该页面不存在,因为记录不存在......似乎这正是 404 的用途。
-
@DaveNewton Rails 在生产中出现
ActiveRecord::RecordNotFound错误后自动呈现public/404.html 页面。我假设 Shpigford 会自定义该文件,甚至默认的 404.html 页面也会显示“您要查找的页面不存在”的消息。我不确定你想在这里争论什么。 -
@DaveNewton 回到你对这个问题的第一条评论。您期望一条消息说该记录不存在,并且该页面可能会建议替代方案,提供有用的链接等。这正是通用 Rails 404 页面所做的或可以定制的。我什至不确定您所说的“抛出 404”是什么意思,因为每个站点在这些情况下都会通过响应 404 状态码来抛出 404。这也是 seo 原因所期望的。 stackoverflow.com/questions/0 响应 404 状态码。
-
@DaveNewton 你能至少澄清一下“抛出 404”是什么意思吗?当未找到页面/记录时,Stack Overflow 会以 404 状态代码明确响应。
标签: ruby-on-rails ruby-on-rails-3 exception error-handling