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 书)