Вопрос по rest, ruby-on-rails – действие Redirect_to из Destroy всегда получает глагол DELETE независимо от того, какой метод я объявляю

23

У меня есть следующий метод в контроллере с именем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

Запись удаляется нормально, после этого я получаю следующий код на сервере:

Redirected to http://127.0.0.1:3000/clientes/12.js?method=get Completed 302 Found in 174ms

Started DELETE "/clientes/12.js?method=get" for 127.0.0.1 at 2012-05-06 19:20:07 +0200 Processing by ClientesController#destroy as JS Parameters: {"method"=>"get", "id"=>"12"} Cliente Load (0.0ms) SELECT "clientes".* FROM "clientes" WHERE "clientes"."id" = ? LIMIT 1 [["id", "12"]] SQL (2.0ms) DELETE FROM "clientes" WHERE "clientes"."id" = ? [["id", 12]] Completed 406 Not Acceptable in 131ms

Кажется, что он посылает запрос с глаголом DELETE на новый контроллер, и я не могу найти способ изменить его на запрос GET для нового контроллера.

Может кто-нибудь дать мне совет, как решить эту проблему?

возможный дубликатredirect_to from "destroy" to "index" Thilo

Ваш Ответ

3   ответа
1

создал следующий маршрут:

match 'mostrar_cliente/:id' => 'clientes#show', :via => :delete 

тогда я переписал редирект как:

redirect_to "/mostrar_cliente/#{@tarea.cliente}", :format => :js

не очень чистое решение, но работает как задумано :)

0

что параметром, передаваемым в строке запроса, является «метод».

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

Rails ожидает параметр под названием «_method» чтобы определить глагол, поэтому, когда вы выполняете перенаправление, вам необходимо убедиться, что это происходит явно:

redirect_to :controller => "clientes", :action =>"show", :id => @tarea.cliente, :format => :js, '_method' =>:get
Error: User Rate Limit Exceeded Perseoh
Error: User Rate Limit Exceeded Perseoh
Error: User Rate Limit Exceeded Perseoh
Error: User Rate Limit Exceeded
34

If you are using XHR requests other than GET or POST and redirecting after the request then some browsers will follow the redirect using the original request method. This may lead to undesirable behavior such as a double DELETE. To work around this you can return a 303 See Other status code which will be followed using a GET request.

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

Источник:http://api.rubyonrails.org/classes/ActionController/Redirecting.html#method-i-redirect_to

Похожие вопросы