2011-02-06 11 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 

metodo 'creare' è in un controller e mappato "/ login", io pongo tipi di contenuto corretto e accettare le intestazioni dal mio ricciolo cliente. Ricevo sempre una risposta di stato http 422.POST JSON per guide del server

Qualche suggerimento?

+3

senza necessità di costruire la risposta JSON a mano: il rendering: json => {: r => "f"} as_json – tokland

risposta

45

Se si inviano le intestazioni corrette, non sarà necessario eseguire "ActiveSupport :: JSON.decode" - le guide lo faranno per te.

Avrai bisogno di impostare le seguenti intestazioni nel tuo post.

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

A 422 significa Unprocessable Entity --- generalmente che c'era un errore di convalida.

Dovresti poterlo avere. Se non puoi, le intestazioni non sono impostate correttamente.

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

così tutta la mia JSON richiesta POST corpo è messo automaticamente nel params [] hash.? Quindi posso usare strutture ad oggetti più profonde in json e verranno analizzate correttamente? – Rohan

+0

Sì. Strutture più profonde richiedono l'impostazione di 'accept_nested_attributes_for' nei modelli. (genitore accetta per bambino) –

+4

BTW, a se si invia le intestazioni di richiesta al server, assicurarsi di utilizzare: e non =, come in: "Content-Type: application/json" e "Accetta: application/json" – Ran

Problemi correlati