【问题标题】:Rails 5 API always return 200 OK, even if a rollback occurs. Why?Rails 5 API 总是返回 200 OK,即使发生回滚。为什么?
【发布时间】:2017-02-12 18:10:13
【问题描述】:

我有一个很奇怪的问题。我正在使用 Rails 5 和 Devise 构建基于 json 的 REST api,但是对于每个请求,我总是得到 200 OK,即使出现 Rollback。例如:

curl -i -H "Content-Type: application/json" -d '{ "user": { "email": "user@example.com", "password": "123457890" } }' -X POST http://api.test.com:3000/users/registration

它通常将用户存储到数据库中,但是例如,如果我再次发布相同的请求,则会在数据库上执行Rollback,因为电子邮件是一个索引(并且是正确的,这就是我想要的...... ) 但回复又是200 OK

现在,Devise 控制器被覆盖,因为我需要在不同的命名空间和模块之间共享它们,我按照Devise/Wiki 的建议覆盖它们,默认行为为:

def method
    super
end

因此,在正常的应用程序中,如果某些验证失败,则会在相应的视图中向用户返回错误,并使用默认控制器(与我的相同,没有任何改变!) .为什么使用“仅 API”应用程序,每个请求似乎总是很好?我忘记了什么?

谢谢大家。

编辑:服务器输出。

Started POST "users/registration" for 127.0.0.1
Processing by Users::RegistrationsController#create as */*
Parameters: {"user"=>{"email"=>"user@example.com", "password"=>" [FILTERED]"}, "registration"=>{"user"=>{"email"=>"user@example.com", "password"=>"[FILTERED]"}}}
(0.3ms)  BEGIN
    User Exists (0.8ms)  SELECT  1 AS one FROM "users" WHERE "users"."email" = $1 LIMIT $2  [["email", "user@example.com"], ["LIMIT", 1]]
(0.3ms) ROLLBACK 
    Completed 200 OK in 143ms (Views: 0.1ms | ActiveRecord: 1.4ms)

【问题讨论】:

  • 能否将相关日志粘贴到此请求中?
  • 是的,我编辑问题,只针对错误,第一笔交易顺利!
  • 服务器在正文中返回什么?
  • 服务器未将请求视为 JSON 请求。 Processing by Users::RegistrationsController#create as */*。在您的路由中设置default: { format: 'json' } 选项,或者确保您在请求中发送内容类型标头。
  • 但是在纯 API 应用程序上使用设计是浪费时间恕我直言。

标签: ruby-on-rails ruby devise ruby-on-rails-5 rails-api


【解决方案1】:

[已解决]

经过 4 天的搜索,我在 application_controller.rb 中忘记了 respond_to :json

【讨论】:

    【解决方案2】:

    检查您的请求中的 Content-Type 和 Accept 标头是否配置正确,例如。接受 -> application/json 和 Content-Type -> application/json.

    【讨论】:

      猜你喜欢
      • 2022-10-04
      • 2019-03-02
      • 1970-01-01
      • 2017-12-19
      • 2015-03-16
      • 2015-01-04
      • 2018-10-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多