Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 通过Permalink查找项目,如果未找到,则为404_Ruby On Rails_Ruby_Http Status Code 404 - Fatal编程技术网

Ruby on rails 通过Permalink查找项目,如果未找到,则为404

Ruby 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。在我的站点上,我

我改变了我的节目控制器,通过他们的永久链接而不是他们的id来查找记录(用于搜索引擎优化)

但是,如果我输入localhost:3000/projects/foo(并且没有一个项目具有foo permalink),我会得到一个500服务器错误,而不是一个404notfound


为什么会出现这种情况,我如何修复它?

我假设您遇到了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