28
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 

'create' method is in a controller and mapped to "/login", I am setting correct content types and accept headers from my curl client. I am getting a 422 http status response all the time.

Any suggestions?

1
  • 3
    no need to build the JSON response by hand: render :json => {:r => "f"}.as_json Commented Feb 6, 2011 at 17:41

1 Answer 1

46

If you are sending in the right headers, then you won't need to do "ActiveSupport::JSON.decode" -- rails will do that for you.

You'll need to set the following headers in your post.

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

A 422 means Unprocessable Entity --- generally that there was a validation failure.

You should be able to have. If you can't, then your headers aren't set correctly.

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 
Sign up to request clarification or add additional context in comments.

4 Comments

so all my json POST request body is put into the params[] hash automatically? So can i use more deep object structures in json and will they be parsed correctly?
Yes. Deeper structures will require that you set the accepts_nested_attributes_for in your models. (parent accepts for child)
BTW, a if you send the request headers to the server, make sure you use : and not =, as in: "Content-Type: application/json" and "Accepts: application/json"
@Ran its Accept not Accepts!

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.