ruby-on-rails - new - routes resource rails




Un'azione Redirect_to from Destroy ottiene sempre il comando DELETE qualunque: metodo che dichiaro (2)

È possibile visualizzare nel registro che il parametro passato nella stringa di query è "metodo".

Parameters: {"method"=>"get", "id"=>"12"}

Rails si aspetta un parametro chiamato "_method" per determinare il verbo, quindi quando esegui il reindirizzamento devi assicurarti che ciò accada esplicitamente:

redirect_to :controller => "clientes", :action =>"show", :id => @tarea.cliente, :format => :js, '_method' =>:get

Ho il seguente metodo in un controller chiamato tareas_controller

def destroy
  @tarea = Tarea.find(params[:id])
  @tarea.destroy

  respond_to do |format|
    format.html { redirect_to tareas_url }
    format.json { head :ok }
    format.js { redirect_to :controller => "clientes", :action =>"show", :id => @tarea.cliente, :format => :js, :method=>:get}
  end

end

Il record viene cancellato ok, dopo di che ottengo il seguente codice sul server:

Reindirizzato a http://127.0.0.1:3000/clientes/12.js?method=get Completato 302 Trovato in 174 ms

Inizia DELETE "/clientes/12.js?method=get" per 127.0.0.1 alle 2012-05-06 19:20:07 +0200 Elaborazione per ClientesController # destroy come parametri JS: {"method" => "get", "id" => "12"} Cliente Load (0.0 ms) SELECT "client". * FROM "clientes" WHERE "clientes". "id" =? LIMIT 1 [["id", "12"]] SQL (2.0 ms) ELIMINA DA "client" DOVE "client". "Id" =? [["id", 12]] Completato 406 Non accettabile in 131 ms

Sembra che invii la richiesta con un verbo DELETE al nuovo controller e non riesco a trovare un modo per cambiarlo in una richiesta GET al nuovo controller.

Qualcuno può darmi consigli su come risolvere questo problema?


Dovresti reindirizzare con uno stato 303.

Se si utilizzano richieste XHR diverse da GET o POST e il reindirizzamento dopo la richiesta, alcuni browser seguiranno il reindirizzamento utilizzando il metodo di richiesta originale. Ciò potrebbe portare a comportamenti indesiderati come un doppio DELETE. Per ovviare a questo, è possibile restituire un 303 See Other codice di stato che verrà seguito utilizzando una richiesta GET.

  redirect_to posts_url, status: :see_other
  redirect_to action: 'index', status: 303

Fonte: http://api.rubyonrails.org/classes/ActionController/Redirecting.html#method-i-redirect_to