PDA

Visualizza la versione completa : [Rails] link_to_remote chiamare azione in controller


mlipreri
21-06-2009, 21:14
Ciao,
ho aggiunto nel mio controller photos_controller un azione chiamata destroymany.
Questo il mio file routes.rb


ActionController::Routing::Routes.draw do |map|
map.resources :photos, :collection => { :destroymany => :get}
map.root :controller => 'photos'
end

Ora nella mia view chiamo il seguete link


<%= link_to_remote "delete", :url => { :controller => :photos, :action => :destroymany }, :with =>"'delete_photo_array='+getElementInBoard()" %>

e non riesco a capire perch va a chiamare index


Processing ApplicationController#index (for 127.0.0.1 at 2009-06-19 23:26:49) [P
OST]
Parameters: {"delete_photo_array"=>"132", "authenticity_token"=>"sK5wSMJu5yy6I
pfNmEEVPL5uxhWXkW3ls2b3B/dfSGM="}

ActionController::MethodNotAllowed (Only get, put, and delete requests are allow
ed.):
c:/ruby/lib/ruby/1.8/webrick/httpserver.rb:104:in `service'
c:/ruby/lib/ruby/1.8/webrick/httpserver.rb:65:in `run'
c:/ruby/lib/ruby/1.8/webrick/server.rb:173:in `start_thread'
c:/ruby/lib/ruby/1.8/webrick/server.rb:162:in `start'
c:/ruby/lib/ruby/1.8/webrick/server.rb:162:in `start_thread'
c:/ruby/lib/ruby/1.8/webrick/server.rb:95:in `start'
c:/ruby/lib/ruby/1.8/webrick/server.rb:92:in `each'
c:/ruby/lib/ruby/1.8/webrick/server.rb:92:in `start'
c:/ruby/lib/ruby/1.8/webrick/server.rb:23:in `start'
c:/ruby/lib/ruby/1.8/webrick/server.rb:82:in `start'

Rendered rescues/_trace (94.0ms)
Rendered rescues/_request_and_response (0.0ms)
Rendering rescues/layout (method_not_allowed)

Cosa mi sfugge?

weppos
22-06-2009, 00:33
Hai dichiarato destroymany come raggiungibile via GET e la chiamata gli arriva invece via POST che, come scritto nella documentazione, il metodo di default.
http://api.rubyonrails.org/classes/ActionView/Helpers/PrototypeHelper.html

Devi modificare la chiamata.


<%= link_to_remote "delete", :url => { :controller => :photos, :action => :destroymany }, :method => :get, :with =>"'delete_photo_array='+getElementInBoard()" %>


By the way, un'action che esegue un destroy dovrebbe sempre rispondere ad un metodo delete.


ActionController::Routing::Routes.draw do |map|
map.resources :photos, :collection => { :destroymany => :delete }
map.root :controller => 'photos'
end

<%= link_to_remote "delete", :url => { :controller => :photos, :action => :destroymany }, :method => :delete, :with =>"'delete_photo_array='+getElementInBoard()" %>

mlipreri
22-06-2009, 12:41
grazie, ora va. Quindi il metodo di default per un azione post e se non specifico altro resta tale.

weppos
22-06-2009, 12:42
Originariamente inviato da mlipreri
grazie, ora va. Quindi il metodo di default per un azione post e se non specifico altro resta tale.

No. Il metodo di default per una chiamata AJAX post, ma questo dipende da prototype.

Loading