2012-08-03 28 views
9

Birisi bana bu PUT yönteminin neden çalışmadığını söyler misiniz?Raylar üzerinde yakut - Güncellemede PUT yöntemi ajax

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 "PUT":

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

Sunucu ben GET yöntemini kullandık ama benim ajax isteği ben türü var diyor _method eklemeyi denediniz: 'put' Ama yine de aynı

$.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); 
      }); 

Sunucu:

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' "kaynak% 5Bpos_y% 5D = 45 & kaynak% 5Bpos_x% 5D = 50 & yöntem = & = 1344004390840 koymak" d herhangi bir yardım için teşekkür ederiz.

+0

Hangi tarayıcıyı kullanıyorsunuz:

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

Peki yapmanız gereken şudur? – Vodun

+0

Bunu mu demek istediniz: POST, not PUT? .... –

+0

Cevabımı güncelledim. Bunu deneyebilirsin :-) –

cevap

25

Raylar, put talebini "put" değeriyle _method parametresi aracılığıyla belirler.

Tüm tarayıcılar put yöntemini desteklemediğinden, form_tag içindeki hileleri raylar. onun bir PUT şeklinde bu çıktıyı koyarak:

$.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

Başar, '_method:' put '' sorunumu çözdü! – gamov

+2

hey bu harika çalışıyor. Bana hashiyi neden bir JSON dizesine dönüştürdüğümüzü açıklayabilir misiniz? 'JSON.stringify' – jmoon90

İlgili konular