我更改了我的显示控制器以通过他们的永久链接而不是他们的 id 来查找记录(为了 SEO 多汁)。
def show
@project = Project.find_by_permalink(params[:id])
end
但是,如果我输入 localhost:3000/projects/foo (并且没有带有 foo 永久链接的项目),我会收到 500 服务器错误,而不是 404 未找到。
为什么会这样,我该如何解决?
我更改了我的显示控制器以通过他们的永久链接而不是他们的 id 来查找记录(为了 SEO 多汁)。
def show
@project = Project.find_by_permalink(params[:id])
end
但是,如果我输入 localhost:3000/projects/foo (并且没有带有 foo 永久链接的项目),我会收到 500 服务器错误,而不是 404 未找到。
为什么会这样,我该如何解决?
这可能是 2.3 的新增功能,但您可以在动态查找器之后使用感叹号,如下所示:
def show
@project = Project.find_by_permalink!(params[:id])
end
如果没有发现ActiveRecord::RecordNotFound
异常,则会引发异常。
我假设收到 500 错误,因为您的 show 操作正在尝试引用@project
find 返回时的属性nil
您需要检查以确保@projects
有一些数据,否则手动渲染 404。在我的网站上,我在类似的情况下呈现了一个名为“错误”的自定义操作:
render :action => 'error', :status => 404 if @projects.blank?
如果@projects
存在,则显示操作将正常呈现。
或者您可以引发 404 异常。