ruby-on-rails - Rails 4 AbstractController::Metal 渲染状态 != 200(即 401、404)

标签 ruby-on-rails ruby render rack

我正在我的应用程序中实现一个简单的 API 来与 Android 应用程序通信。我主要尝试使用 AbstractController::Metal 来提高性能。我遇到的问题是渲染忽略了我传递的状态选项。

非常简单的例子:

class Api::V1::ApiController < ActionController::Metal
  include AbstractController::Rendering
  include ActionController::Renderers::All
  include ActionController::RackDelegation
  include ActionController::MimeResponds
end

class Api::V1::SessionsController < Api::V1::ApiController
  def show
    render status: :unauthorized   # using 401 yields the same result
  end
end

打电话

curl -v -X GET http://app.dev:3000/api/v1/sessions.json

我希望收到 401,但我却收到 200 OK:

> GET /api/v1/sessions.json HTTP/1.1
> User-Agent: curl/7.30.0
> Host: app.dev:3000
> Accept: */*
> 
< HTTP/1.1 200 OK

有什么想法吗?覆盖 response.status 是我迄今为止发现的唯一解决方法,但老实说,它看起来像一个丑陋的 hack。

提前感谢您的见解。

最佳答案

要不渲染任何内容并返回代码 401,请使用:

render nothing: true, status: :unauthorized

关于ruby-on-rails - Rails 4 AbstractController::Metal 渲染状态 != 200(即 401、404),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25531441/

相关文章:

php - Yii2 渲染带有查询参数的 url

r - 需要对 Shiny 中的多个输出使用相同的输入

ruby-on-rails - 具有一些智能的 Rails 迭代

ruby-on-rails - 如何登录设计以使用 Minitest 测试 Controller

ruby-on-rails - Ruby on Rails Rack Cors 中间件黑名单

html - 对齐 rails form_for 与 bootstrap 集成的按钮

Ruby 相当于 Ipython %timeit

ruby-on-rails - 如何自动定期运行我的规范并在失败时收到通知?

Symfony Controller 嵌入错误 : The controller for URI "/_fragment" is not callable

ruby-on-rails - 无方法错误 : undefined method `getlocal' for DateTime object