2011-01-06 13 views
5

W widoku listy mojej aplikacji mogę wyświetlać listę rekordów lub drążyć i edytować/aktualizować rekord. Po aktualizacji chcę przejść bezpośrednio z powrotem do widoku listy, pomijając kilka stron pośrednich - ale nie chcę po prostu link_to(:action => list) - dotyczy to stronicowania. Chcę wrócić do dokładnej strony "listy", z której pochodzę. Jaki jest najlepszy sposób? Podaj ukryty argument gdzieś z numerem strony? Czy istnieje elegancki sposób, aby to osiągnąć?Jak przejść "2 poziomy" wstecz?

Odpowiedz

7

Po prostu wyrzucę to tam z zastrzeżeniem, że mogą istnieć względy bezpieczeństwa lub istniejące klejnoty.

Podczas akcji edycji można zapisać poprzednią stronę w sesji. Następnie w akcji aktualizacji przekieruj do niego.

class MyController < ApplicationController 

    def edit 
    session[:prev_url] = request.referer 
    end 

    def update 
    redirect_to session[:prev_url] 
    end 

end 
2

Alternatywnie do korzystania z sesji, można nosić referer poprzez działania za pomocą ukrytego pola formularza.

class MyController < ApplicationController 

    def edit 
    @prev_url = request.referer 
    end 

    def update 
    redirect_to params[:prev_url] 
    end 

end 

Formularz użyciu hidden_field:

f.hidden_field :prev_url, :value => @prev_url 

Jeśli nie chcą nosić ze sobą całego URL odsyłający można również zrobić to samo z parametru strony zamiast i dodać parametr do adresu URL w update działania. Spodziewam się, że pomocnicy urlów Railsa będą akceptować parametry.