3

我更改了我的显示控制器以通过他们的永久链接而不是他们的 id 来查找记录(为了 SEO 多汁)。

def show
  @project = Project.find_by_permalink(params[:id])
end

但是,如果我输入 localhost:3000/projects/foo (并且没有带有 foo 永久链接的项目),我会收到 500 服务器错误,而不是 404 未找到。

为什么会这样,我该如何解决?

4

3 回答 3

7

这可能是 2.3 的新增功能,但您可以在动态查找器之后使用感叹号,如下所示:

def show
  @project = Project.find_by_permalink!(params[:id])
end

如果没有发现ActiveRecord::RecordNotFound异常,则会引发异常。

于 2009-03-26T01:22:30.277 回答
0

我假设收到 500 错误,因为您的 show 操作正在尝试引用@projectfind 返回时的属性nil

您需要检查以确保@projects有一些数据,否则手动渲染 404。在我的网站上,我在类似的情况下呈现了一个名为“错误”的自定义操作:

render :action => 'error', :status => 404 if @projects.blank?

如果@projects存在,则显示操作将正常呈现。

于 2009-03-25T03:20:13.933 回答
0

或者您可以引发 404 异常。

于 2009-03-26T00:44:59.897 回答