2013-07-17 7 views
8

普通のモデルレールアプリ(POSTman)から数日前に書きたいと思っていますが、その方法を理解することはできません。それをやる。JSON APIを使ってRailsに書き込む

私のアプリには名前フィールドを持つユーザーモデルがあります。私がしようとしているのは、POSTmanを使用してJSON経由でリモートで名前を変更することだけです。

これを行う方法についてのヘルプは、基本的なリソースへのリンクを含めていただければ幸いです。

これはかなり基本的だと思います。

EDIT:サーバログから

:ここに郵便配達出力

enter image description here

EDIT 2からのスクリーンショットです

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) 

トランザクションが起こったが、レコードISNされます実際に更新されていません。コントローラで何かを変更する必要がありますか?これは、変更のない通常のレール生成コントローラです。

EDIT 3:ここでは

がちょうど再びhttp://localhost:3000/users/1.json

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

に行くから私の出力である、私は足場から何も変わっていないてきた、と私はどのように把握することができていませんJSONをフォーマットして、答えのようにユーザーの下に入れ子にします。

# 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 

これはとても難しいですなぜ私は理解していない:

は、ここに私のコントローラの関連する部分です。私はちょうどあなたが投稿するコントローラについては

+0

のハッシュを作成しますか?あなたは、レールサーバーのログに出力が表示されますか? – DiegoSalazar

+0

それは何もしません。アドレスhttp:// localhost:3000/users/1.jsonを入力し、名前としてキーを使用してPUTを選択し、値がJeff 204の場合、内容は返されません。 – Arel

+0

@diegogreyrobot私はちょうど私がやっていることのスクリーンショットを追加しました。 – Arel

答えて

5

... JSON経由名を更新しようとしている:

protect_from_forgery with: :null_session 

などから: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が間違っています...投稿しています

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

コントローラがuser.update_attribute(params[:user])を行いますので、あなたのJSONは、ユーザー属性の下

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

にする必要があり、これは問題である正確に何

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

これでCSRFトークンエラーが発生していませんが、トランザクションをコミットした後も204のコンテンツエラーは発生していません。私は完全な出力で私の質問を更新しました。 – Arel

+0

正しいJSONで更新済み –

+0

私はここで完全に失われています。私はあなたが表示する方法で自分のJSON出力をどのようにフォーマットするかを理解しようとしているレール文書を読んできました。出力はあなたの方法でなければならず、あなたの(正しい)形式からの変更方法私の間違ったフォーマットに。ここにdocsがあります:http://api.rubyonrails.org/classes/ActionController/ParamsWrapper.html私は自分の出力と私のコントローラで私の質問を更新しました。 – Arel

関連する問題