2013-07-17 27 views
8

Tôi đã cố viết một ứng dụng đường ray mô hình thông thường từ POSTman trong vài ngày và không thể tìm hiểu cách thực hiện hoặc tìm bất kỳ thông tin nào về cách làm đi.Viết cho Rails bằng JSON API

Ứng dụng của tôi có Mô hình người dùng với trường tên. Tất cả những gì tôi đang cố gắng làm là thay đổi tên từ xa thông qua JSON bằng POSTman.

Bất kỳ trợ giúp nào về cách thực hiện việc này được đánh giá cao, bao gồm liên kết đến tài nguyên cơ bản về cách thực hiện.

Tôi tưởng tượng điều này khá cơ bản.

EDIT: đây là một ảnh chụp màn hình từ đầu ra Postman

enter image description here

EDIT 2:

từ nhật ký máy chủ:

Started PUT "https://stackoverflow.com/users/1.json" for 127.0.0.1 at 2013-07-17 16:53:36 -0400 
Processing by UsersController#update as JSON 
    Parameters: {"name"=>"Jeff", "id"=>"1"} 
    User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", "1"]] 
    (0.1ms) begin transaction 
    (0.1ms) commit transaction 
Completed 204 No Content in 3ms (ActiveRecord: 0.4ms) 

Giao dịch đang xảy ra, nhưng isn kỷ lục thực sự không được cập nhật. Tôi có cần thay đổi thứ gì đó trong bộ điều khiển không? Nó chỉ là một đường ray thường xuyên tạo ra bộ điều khiển mà không có thay đổi.

EDIT 3:

Dưới đây là kết quả của tôi từ chỉ cần đi để http://localhost:3000/users/1.json

{ 
"created_at": "2013-07-02T21:51:22Z", 
"id": 1, 
"name": "Arel", 
"updated_at": "2013-07-02T21:51:22Z" 
} 

lần nữa, tôi đã thay đổi gì từ đoạn đầu đài, và tôi đã không thể tìm ra cách để định dạng JSON để lồng nó dưới người dùng như câu trả lời gợi ý.

Dưới đây là phần có liên quan của bộ điều khiển của tôi:

# GET /users/1 
    # GET /users/1.json 
    def show 
    @user = User.find(params[:id]) 

    respond_to do |format| 
     format.html # show.html.erb 
     format.json { render json: @user } 
    end 
    end 

# PUT /users/1 
    # PUT /users/1.json 
    def update 
    @user = User.find(params[:id]) 

    respond_to do |format| 
     if @user.update_attributes(params[:user]) 
     format.html { redirect_to @user, notice: 'User was successfully updated.' } 
     format.json { } 
     else 
     format.html { render action: "edit" } 
     format.json { render json: @user.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

Tôi không hiểu tại sao điều này là rất khó khăn. Tôi chỉ cố gắng để cập nhật một tên qua JSON ...

+0

gì chính xác là vấn đề? Bạn có thấy bất kỳ đầu ra nào trong nhật ký máy chủ đường ray không? – DiegoSalazar

+0

Nó không làm gì cả. Khi tôi đặt địa chỉ http: // localhost: 3000/users/1.json và chọn PUT với khóa là tên và giá trị là Jeff 204, không có nội dung nào được trả về – Arel

+0

@diego.Tôi chỉ cần thêm một ảnh chụp màn hình của những gì tôi đã cố gắng để làm. – Arel

Trả lời

5

Đối với bộ điều khiển bạn muốn gửi đến:

protect_from_forgery with: :null_session 

hoặc thích từ: How do I bypass protect_from_forgery in Rails 3 for a Facebook canvas app?

skip_before_filter :verify_authenticity_token, :only => [THE ACTION] 

EDIT

JSON của bạn không chính xác ... bạn đang đăng

{"name"=>"Jeff", "id"=>"1"} 

Kể từ bộ điều khiển của bạn không user.update_attribute(params[:user]), JSON của bạn cần phải được theo một thuộc tính người dùng

{ 
    "id": 1, 
    "user": { 
     "name": "Jeff" 
    } 
} 

này sẽ tạo một hash của

{"user"=>{"name"=>"Jeff"}, "id"=>"1"} 
+0

Vì vậy, bây giờ nó không đưa ra một lỗi mã thông báo CSRF, nhưng vẫn cho 204 lỗi không có nội dung sau khi thực hiện giao dịch. Tôi đã cập nhật câu hỏi của mình với đầu ra đầy đủ. – Arel

+0

Cập nhật với đúng JSON –

+0

Tôi hoàn toàn bị mất ở đây. Tôi đã đọc tài liệu về rails cố gắng tìm ra cách định dạng đầu ra JSON theo cách bạn hiển thị, và họ nói rằng đầu ra phải là cách của bạn và chỉ đưa ra hướng dẫn về cách thay đổi từ định dạng (đúng) của bạn với định dạng không chính xác của tôi. Dưới đây là các tài liệu: http://api.rubyonrails.org/classes/ActionController/ParamsWrapper.html Tôi cũng đã cập nhật câu hỏi của mình với đầu ra của mình và bộ điều khiển của tôi. – Arel