2012-10-30 12 views
5

ich einen Link Löschen haben, die einen Remote-Aufruf macht:Rails 3: redirect_to mit: remote => true

<%= link_to image_tag("trash.png"), [current_user, bookcase], method: :delete, :remote => true, confirm: "You sure?", title: bookcase.image %> 

In meinem Controller, beende ich die Löschfunktion mit einer Umleitung:

def destroy 
    @bookcase.destroy 
    redirect_to current_user 
end 

Dies funktioniert, außer dass der Benutzer auf die Datei 'user/show.html.erb' anstatt auf die Datei 'user/show.js.erb' umgeleitet wird. Wie kann ich den Benutzer umleiten und angeben, welches Format verwendet werden soll?

+1

Es statt redirect_to machen sollte, kann AJAX-Anfragen nicht umleiten. Ich denke, die Anfrage, die an den Server gesendet wird, ist keine Ajax-Anfrage, sondern eine Delete (Post) Anfrage –

+0

Ist es möglich, eine Löschung [post] Anfrage aus der Ferne zu senden? – nullnullnull

+0

Also habe ich recht? –

Antwort

8

Ich bin mir ziemlich sicher, dass Sie das Format, in dem redirect_to wie dieses

redirect_to current_user, format: 'js'

+0

Ihre Antwort ist richtig, und außerdem sieht es so aus, als würden Rails standardmäßig js verwenden, wenn Sie: remote => true verwenden. Ich hatte dieses Problem, weil ich tatsächlich einen etwas anderen Ansatz zu AJAX gewählt hatte. Obwohl es einige Nachteile hat, habe ich meinen Code geändert, um das konventionellere zu verwenden: remote => true in diesem Fall. Vielen Dank! – nullnullnull

+0

Sie können dataType immer zu Ihrem Ajax hinzufügen, so dass Sie die volle Kontrolle über Ihren Ajax haben, anstatt Rails remote zu verwenden: true –

+0

Es sollte render statt redirect_to sein, Ajax-Anfragen können nicht umleiten. Ich denke, die Anfrage, die an den Server gesendet wird, ist keine Ajax-Anfrage, sondern eine Delete (Post) Anfrage –

13

wissen nicht angeben können, wenn diese diese spezifische Frage ist zu beantworten, können jedoch nicht die folgenden hilfreich sein:

module AjaxHelper 
    def ajax_redirect_to(redirect_uri) 
    { js: "window.location.replace('#{redirect_uri}');" } 
    end 
end 

class SomeController < ApplicationController 
    include AjaxHelper 

    def some_action 
    respond_to do |format| 
     format.js { render ajax_redirect_to(some_path) } 
    end 
    end 
end 
1

Ich bin mir ziemlich sicher, dass dieser Code funktioniert.

render :js => "window.location = '/jobs/index' 

können Sie diesen Code verwenden in Aktion/controller_name/Aktionsname/

Verwandte Themen