web-dev-qa-db-ja.com

POST json to Rails server

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'メソッドはコントローラーにあり、 "/ login"にマップされています。正しいコンテンツタイプを設定し、curlクライアントからのヘッダーを受け入れます。 422 HTTPステータス応答が常に返されます。

助言がありますか?

25
Rohan

正しいヘッダーで送信する場合は、「ActiveSupport :: JSON.decode」を実行する必要はありません-Railsがそれを行います。

投稿に次のヘッダーを設定する必要があります。

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

422はUnprocessable Entityを意味します---通常、検証エラーが発生しました。

あなたが持つことができるはずです。できない場合は、ヘッダーが正しく設定されていません。

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
45
Jesse Wolgamott