完成406在773ms不可接受

时间:2013-05-21 15:55:42

标签: ruby-on-rails json

我的客户端应用程序将JSON编码的POST发送到rails服务器,但服务器显示406错误并且不响应json。

UsersController创建

# POST /users
# POST /users.json
def create
  @user = User.new(params[:user])

  respond_to do |format|
    if @user.save
      format.html { redirect_to @user, notice: 'User was successfully created.' }
      format.json { render json: @user, status: :created, location: @user }
    else
      format.html { render action: "new" }
      format.json { render json: @user.errors, status: :unprocessable_entity }
    end
  end
end

Rails控制台:

Started POST "/users.json" for 127.0.0.1 at 2013-05-21 16:38:47 +0100
Processing by Devise::RegistrationsController#create as JSON
  Parameters: {"user"=>{"name"=>"", "available"=>"true", "email"=>"", "sex"=>"male", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}}
WARNING: Can't verify CSRF token authenticity
   (0.2ms)  begin transaction
  User Exists (0.3ms)  SELECT 1 AS one FROM "users" WHERE "users"."email" = '' LIMIT 1
   (0.2ms)  rollback transaction
Completed 406 Not Acceptable in 773ms (ActiveRecord: 6.1ms)

任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:2)

如果有人看到它,请稍后尝试回答这个问题。我一遍又一遍地遇到这个问题,即使我在控制器底部只有JSON作为格式选项(在你的例子中也是如此):

respond_to do |format|
  format.json { render json: @user, status: :created, location: @user }
end

即使在我的请求中使用 $.getJSON 显式调用它,也会使用JSON数据类型调用它。

我发现的技巧是在我的页面名称上用.json调用它。

 $.getJSON('controllername-your-calling.json?', function(json){
      //do your stuff...
 });

也许它有助于某人。

答案 1 :(得分:0)

您需要在控制器顶部添加respond_to :json, only: [:create]。您可能需要为采用HTML的操作添加respond_to :html