2016-04-22 19 views
1

を返し、私はHttpPartyオブジェクトを介して私のレールのAPIにリクエストを送信しています:私は、このオブジェクトを格納JSON応答は常に200

HTTParty.get(task_list_url(@hotel_id), 
     :headers => { 'X-User-Email' => @user_email, 'X-User-Token'=> @user_token, 'Content-Type' => 'application/json' } 
    ) 

@response変数

にAPIのメソッドは次のようになります

def index 
    @tasks = policy_scope(Task).where(hotel: @hotel) 
    if current_user.created_account == @hotel.account || current_user.hotels.include?(@hotel) 
     render json: {tasks: @tasks, hotel: @hotel} 
    else 
     render json: { 
     :status => :unauthorized, 
     :message => "unauthorized" 
     } 
    end 
    end 

という問題は他のケースに@responseはそのようなルックスを返されます10

#<HTTParty::Response:0x7fbb0a580198 parsed_response={"status"=>"unauthorized", "message"=>"unauthorized"}, @response=#<Net::HTTPOK 200 OK readbody=true>, @headers={"x-frame-options"=>["SAMEORIGIN"], "x-xss-protection"=>["1; mode=block"], "x-content-type-options"=>["nosniff"], "access-control-allow-origin"=>["*"], "access-control-allow-methods"=>["POST, GET, PUT, DELETE, OPTIONS"], "access-control-allow-headers"=>["Origin, Content-Type, Accept, Authorization, Token"], "access-control-max-age"=>["1728000"], "content-type"=>["application/json; charset=utf-8"], "etag"=>["W/\"2cd59ce00f09c29553693183e9a04a4d\""], "cache-control"=>["max-age=0, private, must-revalidate"], "x-request-id"=>["5acc353c-48aa-410d-a4bc-888c653cae02"], "x-runtime"=>["0.459027"], "vary"=>["Origin"], "connection"=>["close"], "transfer-encoding"=>["chunked"]}> 

あなたが見ることができるように関連情報は@responseではなく、parsed_responseにあります。これは私のクライアントアプリケーションに問題を引き起こします。なぜなら、正しい応答がUNAUTHORIZED 401であるのに対し、OK 200を返す@responseをチェックしているからです。

@responseオブジェクトに正しいjson応答を挿入するにはどうしたらいいですか? HTTPartyオブジェクト内でparsed_responseのチェックを行う方法

答えて

3

コントローラのこの小さな修正は、そのことを行う必要があります。

の代わりに:

render json: { 
    :status => :unauthorized, 
    :message => "unauthorized" 
    } 

この使用:

render json: { message: "unauthorized" }, status: :unauthorized 
関連する問題