Rails: Render Json Status Problems

Morgan picture Morgan · Feb 20, 2014 · Viewed 45.8k times · Source

When I

  render json: {
    error: "No such user; check the submitted email address",
    status: 400
  }

and then do my tests and check for

response.code

I get 200 rather than 400

I'm sure the answer to this absurdly simple, but I've been looking for an hour and cannot seem to get this working. I could just parse the Json and then check the status code...but isn't there a way to get response.code to return the status? I understand that technically it was a success and I assume that's why the response.code is returning 200, but I was using Jbuilder before where I could directly impact the code returned.

Answer

Richard Jordan picture Richard Jordan · Feb 20, 2014

You have created the json there, which will be returned, and in that json will be an identification of the status - 400. However, that's not telling Rails to send the 400 status in the header.

You could do:

render json: {
  error: "No such user; check the submitted email address",
  status: 400
}, status: 400

Or something like

payload = {
  error: "No such user; check the submitted email address",
  status: 400
}
render :json => payload, :status => :bad_request

You can use either the symbol :bad_request or the status number 400.