Ruby on rails 通过Permalink查找项目,如果未找到,则为404
我改变了我的节目控制器,通过他们的永久链接而不是他们的id来查找记录(用于搜索引擎优化) 但是,如果我输入localhost:3000/projects/foo(并且没有一个项目具有foo permalink),我会得到一个500服务器错误,而不是一个404notfoundRuby on rails 通过Permalink查找项目,如果未找到,则为404,ruby-on-rails,ruby,http-status-code-404,Ruby On Rails,Ruby,Http Status Code 404,我改变了我的节目控制器,通过他们的永久链接而不是他们的id来查找记录(用于搜索引擎优化) 但是,如果我输入localhost:3000/projects/foo(并且没有一个项目具有foo permalink),我会得到一个500服务器错误,而不是一个404notfound 为什么会出现这种情况,我如何修复它?我假设您遇到了500个错误,因为当查找返回nil时,您的show操作试图引用@project的属性 您需要检查以确保@projects具有一些数据,否则需要手动渲染404。在我的站点上,我
为什么会出现这种情况,我如何修复它?我假设您遇到了500个错误,因为当查找返回
nil
时,您的show操作试图引用@project
的属性
您需要检查以确保@projects
具有一些数据,否则需要手动渲染404。在我的站点上,我在类似情况下呈现了一个名为“error”的自定义操作:
render :action => 'error', :status => 404 if @projects.blank?
如果存在
@projects
,则显示操作将正常呈现。或者您可以引发404异常。这可能是一个2.3的添加,但您可以在动态查找器后使用感叹号,如下所示:
def show
@project = Project.find_by_permalink!(params[:id])
end
如果未找到任何内容,将引发
ActiveRecord::RecordNotFound
异常。在Rails控制台(或development.log)中得到的具体错误消息是什么?
def show
@project = Project.find_by_permalink!(params[:id])
end