2012-10-30 11 views
5

Mam usuwania link, który sprawia, że ​​zdalne wywołanie:Rails 3: redirect_to z: remote => true

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

W moim kontrolera, ja zakończenia usuwania funkcji z przekierowaniem:

def destroy 
    @bookcase.destroy 
    redirect_to current_user 
end 

Działa to, z wyjątkiem przekierowania użytkownika do pliku "user/show.html.erb" zamiast pliku "user/show.js.erb". Jak mogę przekierować użytkownika, określając, którego formatu użyć?

+1

Należy uczynić zamiast redirect_to Ajax żądania nie można przekierować. Myślę, że żądanie wysyłane na serwer nie jest prośbą o ajax, ale prośba o usunięcie (po) –

+0

Czy możliwe jest zdalne wysłanie żądania usunięcia [post]? – nullnullnull

+0

Więc mam rację? –

Odpowiedz

8

Jestem całkiem pewien, że można określić format w redirect_to jak ten

redirect_to current_user, format: 'js'

+0

Twoja odpowiedź jest właściwa, a ponadto wygląda na to, że rails domyślnie użyje js podczas używania: remote => true. Wystąpił ten problem, ponieważ faktycznie podjąłem nieco inne podejście do AJAX. Chociaż ma pewne wady, posunąłem się naprzód i zmieniłem swój kod, aby użyć bardziej konwencjonalnego: remote => true w tym przypadku. Dzięki! – nullnullnull

+0

Zawsze można dodać dataType do AJAX, dzięki czemu można mieć pełną kontrolę nad swoim ajax zamiast korzystania Rails zdalny: true –

+0

Należy renderowania zamiast redirect_to Ajax żądania nie można przekierować. Myślę, że żądanie wysłane na serwer nie jest prośbą o ajax, ale prośba o usunięcie (post) –

13

Nie wiem, czy to jest odpowiedzi na to konkretne pytanie, ale niektórzy uważają za pomocną:

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

Jestem całkiem pewny ten kod zadziała.

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

Można użyć tego kodu w akcji/controller_name/nazwa akcji/

Powiązane problemy