Completo 406 No es aceptable en 773 ms

La aplicación de mi cliente envía POST codificada JSON al servidor de Rails, pero el servidor muestra un error 406 y no responde a json.

UsersController crea

# 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 

Consola de 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) 

¿Alguien puede ayudarme?

Voy a intentar contestar esto un rato más tarde en caso de que alguien lo vea. Me he encontrado con este problema una y otra vez, incluso cuando solo he tenido JSON como opción de formato en la parte inferior de mi controlador (como esto en tu ejemplo):

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

Incluso cuando lo llamo explícitamente con $.getJSON en mis solicitudes, lo que sí lo hace con los tipos de datos JSON.

El truco que encontré fue llamarlo con .json en el nombre de mi página.

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

Tal vez ayuda a alguien.

Deberá agregar respond_to :json, only: [:create] en la parte superior de su controlador. Es posible que deba agregar respond_to :html para las acciones que toman HTML.