2013-07-17 7 views
8

Próbuję napisać od kilku dni do zwykłej aplikacji szyny modelowej od POSTman i nie mogę wymyślić, jak to zrobić, ani znaleźć żadnych informacji o tym, jak to zrobić. Zrób to.Pisanie na szynach za pomocą interfejsu JSON API

Moja aplikacja ma model użytkownika z polem nazwy. Wszystko, co próbuję zrobić, to zmienić nazwę zdalnie poprzez JSON za pomocą POSTman.

Każda pomoc w tym zakresie jest doceniana, w tym link do podstawowego zasobu, jak to zrobić.

Wyobrażam sobie, że to dość proste.

EDIT: tutaj znajduje się zrzut ekranu z wyjścia listonosz

enter image description here

EDIT 2:

z dziennika serwera:

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) 

Transakcja dzieje, ale ISN rekord Naprawdę jest aktualizowany. Czy muszę coś zmienić w kontrolerze? To zwykły kontroler generowany przez szyny bez żadnych zmian.

EDIT 3:

Oto moje wyjście z po prostu będzie http://localhost:3000/users/1.json

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

znowu, ja już nic z rusztowania zmieniło, a ja nie byłem w stanie dowiedzieć się, jak sformatuj JSON, aby zagnieździł go pod użytkownikiem, tak jak sugeruje odpowiedź.

Oto odpowiednia część mojego kontrolera:

# 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 

Nie rozumiem dlaczego jest to tak trudne. Po prostu próbuję zaktualizować nazwę za pomocą JSON ...

+0

czym dokładnie polega problem? Czy widzisz jakieś dane wyjściowe w dzienniku serwera rails? – DiegoSalazar

+0

Po prostu nic nie robi. Kiedy umieszczam adres http: // localhost: 3000/users/1.json i wybieram PUT z kluczem jako nazwą, a wartość jako Jeff 204 nie zwraca treści – Arel

+0

@diego.greyrobot Właśnie dodałem zrzut ekranu z tego, co próbowałem zrobić. – Arel

Odpowiedz

5

Dla kontrolera chcesz pisać do:

protect_from_forgery with: :null_session 

albo jak z: 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

Twój JSON jest nieprawidłowy ... publikujesz:

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

Od kontrolera robi user.update_attribute(params[:user]) Twój JSON musi być pod atrybutem użytkownika

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

Stworzy to skrót

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

Więc teraz nie daje błędu tokenu CSRF, ale nadal daje błąd 204 treści po dokonaniu transakcji. Zaktualizowałem moje pytanie z pełnym wynikiem. – Arel

+0

Zaktualizowany poprawnym JSON –

+0

Jestem tutaj całkowicie zagubiony. Czytałem dokumenty z szynami próbując dowiedzieć się, jak sformatować moje wyjście JSON w taki sposób, w jaki pokazujesz, i mówią, że dane wyjściowe powinny już być na twojej drodze, i wydają tylko instrukcje, jak zmienić od (prawidłowego) formatu do mojego niewłaściwego formatu. Oto dokumenty: http://api.rubyonrails.org/classes/ActionController/ParamsWrapper.html Zaktualizowałem również moje pytanie z danymi wyjściowymi i moim kontrolerem. – Arel

Powiązane problemy