通过Permalink查找项目,如果找不到,则找到404

时间:2009-03-25 02:02:12

标签: ruby-on-rails ruby http-status-code-404

我改变了我的节目控制器,通过他们的固定链接而不是他们的ID(用于SEO多汁)找到记录。

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

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

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

3 个答案:

答案 0 :(得分:7)

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

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

如果未找到任何内容,则会引发ActiveRecord::RecordNotFound异常。

答案 1 :(得分:0)

我认为收到500错误是因为您的展示操作尝试在找回@project

时引用nil的属性

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

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

如果@projects存在,则show动作呈现正常状态。

答案 2 :(得分:0)

或者你可以提出404异常。