Ruby on rails 中的资源未找到错误

Posted

技术标签:

【中文标题】Ruby on rails 中的资源未找到错误【英文标题】:Resource not found errors in Ruby on rails 【发布时间】:2018-01-27 10:01:28 【问题描述】:

我对 RoR 很陌生,我知道 ActiveRecord::RecordNotFound 可以映射到 http 404 错误。 ruby on rails 中是否还有其他资源不存在会引发类似的问题 ResourceName::ResourceNameNotFound ?

还有 RoR 引发的任何错误,相当于 520、403、401 吗?

任何帮助将不胜感激。

【问题讨论】:

这称为异常处理,有几个线程处理它:blog.siami.fr/diving-in-rails-exceptions-handling 或这个medium.com/rails-ember-beyond/… 我不是很精通这个主题,所以我不能真正推荐一个但是如果您阅读一些内容,您将有一个很好的概述 【参考方案1】:

不见了

def index

end

会的,

如果没有, 重启电脑,一切正常

【讨论】:

【参考方案2】:

Rails 应使用与 HTTP 协议约定相关的正确 HTTP 错误代码进行响应。我已经使用 Rails 有一段时间了,没有看到任何异常。您也可以像这样提出自己的异常

@record = ModelName.find_by(field_name_goes_here: params[:some_parameter_name_goes_here])
    if not @record.blank?
        render "view_file_name_goes_here"
    else
        raise ActiveRecord::RecordNotFound
    end

此代码将导致 Rails 以 404 响应。 请求未定义的路由也会导致 404。

其他例子:

代码中的语法错误将返回 500。

如果您使用 devise 或其他一些 gem 进行授权,未经授权的请求将导致呈现 401。Rails 中没有任何东西会立即呈现 401。请记住,您的所有请求都是通过 routes.rb 定义的,并且由您的控制器决定要呈现什么响应以及该响应是否应该返回 HTTP 错误代码。

这里的这个问题提供了有关如何呈现所有类型的错误代码的信息:

Return a specific http status code in Rails

如果您正在寻找调试 http 错误代码,我建议设置 rails 环境配置以将所有请求视为本地请求。这将显示一个可以理解的错误。

Purpose of "consider_all_requests_local" in config/environments/development.rb?

【讨论】:

感谢您的详细解释。但我的问题更像是什么错误会导致 rails 响应 500、403 和 401。正如您在回答中所说,ActiveRecord::RecordNotFound 将导致 rails 响应 404,哪些错误会导致 rails 响应错误代码我提到过吗?【参考方案3】:

在 Rails 中,当您的特定结果不匹配时,您可能会引发错误 就像您提到ActiveRecord::RecordNotFound 一样,每个错误都有其含义。

401 is for NOT_AUTHORIZED
403 is for FORBIDDEN
500 is for server error

还有很多其他的

【讨论】:

以上是关于Ruby on rails 中的资源未找到错误的主要内容,如果未能解决你的问题,请参考以下文章

尝试使用to_json生成嵌套的json格式时,ruby on rails中的未定义方法错误?

如何修复错误:Ruby on Rails 中的“Sass::SyntaxError in Posts#index”?

Windows 上未初始化的常量 Sprockets::SassCacheStore 错误(学习 ruby​​ on rails 书)

Base64 编码的字符串到文件(Ruby on Rails) - 未定义的方法“解包”错误

Ruby on Rails,查看属性

ruby on rails 中的 Coffeescript 编译错误