2011-02-06 47 views
25

phương pháp 'tạo' nằm trong bộ điều khiển và ánh xạ tới "/ đăng nhập", tôi đặt đúng loại nội dung và chấp nhận tiêu đề từ ứng dụng khách curl của tôi. Tôi nhận được một phản ứng trạng thái 422 http tất cả các thời gian.POST json to rails server

Mọi đề xuất?

+3

không cần phải xây dựng các phản ứng JSON bằng tay: render: json => {: r => "f"} as_json – tokland

Trả lời

45

Nếu bạn đang gửi đúng tiêu đề, bạn sẽ không cần phải thực hiện "ActiveSupport :: JSON.decode" - đường ray sẽ làm điều đó cho bạn.

Bạn cần phải đặt các tiêu đề sau trong bài đăng của mình.

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

422 có nghĩa là thực thể không thể xử lý --- thường có lỗi xác thực.

Bạn sẽ có thể có. Nếu bạn không thể, thì tiêu đề của bạn không được đặt chính xác.

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

vì vậy tất cả json yêu cầu POST cơ thể của tôi được đưa vào params [] hash tự động.? Vì vậy, tôi có thể sử dụng cấu trúc đối tượng sâu hơn trong json và họ sẽ được phân tích cú pháp chính xác? – Rohan

+0

Có. Cấu trúc sâu hơn sẽ yêu cầu bạn đặt 'accept_nested_attributes_for' trong các mô hình của bạn. (phụ huynh chấp nhận cho con) –

+4

BTW, nếu bạn gửi tiêu đề yêu cầu đến máy chủ, hãy đảm bảo bạn sử dụng: và không =, như trong: "Content-Type: application/json" và "Accepts: application/json" – Ran