即使发生回滚,Rails 5 API也始终返回200 OK。为什么呢?

时间:2017-02-12 18:10:14

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

我有一个非常奇怪的问题。我正在使用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

因此,在正常的应用程序中,如果某些验证失败,则会在相应的View中向用户返回错误,并使用默认控制器(与我的相同,没有任何更改!) 。为什么使用“仅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)

2 个答案:

答案 0 :(得分:2)

<强> [解决]

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

答案 1 :(得分:0)

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