2012-08-03 11 views
9

Czy ktoś mógłby mi powiedzieć, dlaczego ta metoda PUT nie działa, proszę.Ruby on rails - metoda PUT na aktualizacji ajax

$.ajax({ 
     type: "PUT", 
     dataType: "script", 
     url: '/resources/35', 
     data: 
     { 
      resource : { pos_y: 45, pos_x: 50 } 
     } 
    }).done(function(msg) 
      { 
       alert("Data Saved: " + msg); 
      }); 

Server mówi, że użyłem metody GET ale moim ajax żądanie Mam typu "put"

Started GET "/resources/35?resource%5Bpos_y%5D=45&resource%5Bpos_x%5D=50&_=1344001820350" for 192.168.1.89 at 2012-08-03 15:50:20 +0200 
Processing by ResourcesController#show as */* 
    Parameters: {"resource"=>{"pos_y"=>"45", "pos_x"=>"50"}, "_"=>"1344001820350", "id"=>"35"} 
    User Load (0.3ms) SELECT "users".* FROM "users" 
    Resource Load (0.1ms) SELECT "resources".* FROM "resources" WHERE "resources"."id" = ? LIMIT 1 [["id", "35"]] 
    Rendered resources/show.html.erb within layouts/login (2.3ms) 
Completed 200 OK in 238ms (Views: 235.9ms | ActiveRecord: 0.4ms) 

resources_controller.rb

# PUT /resources/1                                        
    # PUT /resources/1.json                                       
    def update 
    @resource = Resource.find(params[:id]) 

    respond_to do |format| 
     if @resource.update_attributes(params[:resource]) 
     format.html { redirect_to @resource, notice: 'successfully updated.' } 
     format.js 
     else 
     format.html { render action: "edit" } 
     format.js 
     end 
    end 
    end 

I próbowałem dodawać _method: 'put' Ale nadal jest ten sam

$.ajax({ 
     type: "PUT", 
     dataType: "script", 
     url: '/resources/35', 
     data: 
     { 
      resource : { pos_y: 45, pos_x: 50 }, 
      _method: 'put' 
     } 
    }).done(function(msg) 
      { 
       alert("Data Saved: " + msg); 
      }); 

serwera:

"resource% 5Bpos_y% 5D = 45 & zasobów% 5Bpos_x% 5D = 50 & method = umieścić & = 1344004390840"

Started GET "/resources/35?resource%5Bpos_y%5D=45&resource%5Bpos_x%5D=50&_method=put&_=1344004390840" for 192.168.1.89 at 2012-08-03 16:33:10 +0200 
Processing by ResourcesController#show as */* 
    Parameters: {"resource"=>{"pos_y"=>"45", "pos_x"=>"50"}, "_"=>"1344004390840", "id"=>"35"} 
    User Load (0.3ms) SELECT "users".* FROM "users" 
    Resource Load (0.1ms) SELECT "resources".* FROM "resources" WHERE "resources"."id" = ? LIMIT 1 [["id", "35"]] 
    Rendered resources/show.html.erb within layouts/login (0.8ms) 
Completed 200 OK in 93ms (Views: 90.5ms | ActiveRecord: 0.4ms) 

I doceniamy każdą pomoc.

+0

Jakiej przeglądarki używasz? – Vodun

+0

Masz na myśli POST, a nie PUT? .... –

+0

Zaktualizowałem swoją odpowiedź. Możesz spróbować :-) –

Odpowiedz

25

Railsy określają polecenie put za pomocą parametru _method z wartością "put".

Ponieważ nie wszystkie przeglądarki obsługują metodę put, kody rails w tagu form_tag. jego oddanie tego wyjścia w postaci PUT:

<input type='hidden' name='_method' value='put'> 

Więc co trzeba zrobić to:

$.ajax({ 
    type: "POST", 
    dataType: "script", 
    url: '/resources/35', 
    contentType: 'application/json', 
    data: JSON.stringify({ resource:{pos_y:45,pos_x:50}, _method:'put' }) 
}).done(function(msg) 
     { 
      alert("Data Saved: " + msg); 
     }); 
+0

Awesome, '_metoda:' put '' rozwiązał mój problem! – gamov

+2

Hej, który działa świetnie. Czy możesz mi wyjaśnić, dlaczego konwertujemy hasz na ciąg JSON? 'JSON.stringify' – jmoon90