Ruby on rails - PUT method on update ajax
14,276
Rails determines the put request via the parameter _method with the value 'put'.
As not all the browsers support the put method, rails cheats in the form_tag. its putting this output in a PUT form:
<input type='hidden' name='_method' value='put'>
So what you have to do is this:
$.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 );
});
Author by
user1560922
Updated on June 30, 2022Comments
-
user1560922 almost 2 years
Could someone tell me why this PUT method doesn't work please.
$.ajax({ type: "PUT", dataType: "script", url: '/resources/35', data: { resource : { pos_y: 45, pos_x: 50 } } }).done(function( msg ) { alert( "Data Saved: " + msg ); });
Server says that I have used the GET method but in my ajax request I have type: "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 have tried adding _method: 'put' But it's still the same
$.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 ); });
Server:
"resource%5Bpos_y%5D=45&resource%5Bpos_x%5D=50&method=put&=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'd appreciate any help.
-
jmoon90 over 8 yearshey that works great. Can you explain to me why we're converting the hash to a JSON string?
JSON.stringify