2011-02-06 28 views
25
def create 
    req = ActiveSupport::JSON.decode(request.body) 
    if user = User.authenticate(req["email"], req["password"]) 
    session[:user_id] = user.id 
    render :json => "{\"r\": \"t\"}" + req 
    else 
    render :json => "{\"r\": \"f\"}" 
    end 
end 

'crear' método está en un controlador y mapeado a "/ login", estoy configurando los tipos de contenido correctos y acepto los encabezados de mi curl cliente. Recibo una respuesta de estado http 422 todo el tiempo.POST json a rails servidor

¿Alguna sugerencia?

+3

hay necesidad de construir la respuesta JSON con la mano: render: json => {: r => "f"} as_json – tokland

Respuesta

45

Si está enviando los encabezados correctos, entonces no necesitará hacer "ActiveSupport :: JSON.decode" - los raíles lo harán por usted.

Tendrá que establecer los siguientes encabezados en su publicación.

Content-Type: application/json 
Accept: application/json 

A 422 significa entidad no procesable --- en general, que hubo una falla de validación.

Debería poder tener. Si no puede, sus encabezados no están configurados correctamente.

def create 
    if user = User.authenticate(params["email"], params["password"]) 
    session[:user_id] = user.id 
    render :json => "{\"r\": \"t\"}" + req 
    else 
    render :json => "{\"r\": \"f\"}" 
    end 
end 
+0

así que todo mi JSON solicitud POST cuerpo se pone en el [] de hash params automáticamente.? Entonces, ¿puedo usar estructuras de objeto más profundas en json y se analizarán correctamente? – Rohan

+0

Sí. Las estructuras más profundas requerirán que establezca 'accept_nested_attributes_for' en sus modelos. (el padre acepta para el niño) –

+4

BTW, a si envía los encabezados de solicitud al servidor, asegúrese de usar: y no =, como en: "Content-Type: application/json" y "Acepta: application/json" – Ran

Cuestiones relacionadas