2011-09-18 12 views
34

Obecnie mam wyskakujące okienko logowania w moim pasku nagłówka, które znajduje się na każdej stronie mojej witryny. Chcę móc ponownie załadować bieżącą stronę, na której znajduje się dana osoba po pomyślnym zalogowaniu. Jak to zrobić w kontrolerze?Jak mogę ponownie załadować bieżącą stronę w Ruby on Rails?

def create 
    #declaring and defining user variable stuff 
    if user.save 
    #reload current page <--how do I do this? 
    end 
end 

Dzięki

+0

Jest to odpowiedź, która może być pomocna http://stackoverflow.com/a/8619748/1770571 –

Odpowiedz

45

dla mojej aplikacji, używam redirect_to :back i to załatwia sprawę. Wątpię jednak, aby błąd ten pojawił się w nie ogólnym użyciu (użytkownik pochodzi ze specjalnej strony?), Ale nie znalazłem go w mojej aplikacji.

+2

Działa to dla mnie. Nie przeładowujesz bieżącej strony, tak samo jak idziesz do akcji tworzenia, a następnie z powrotem ... Jeśli używasz AJAX, to po prostu zaktualizujesz część, w której pokazujesz gościa zalogowanego ... i trzymaj go na tej stronie. – pjammer

+0

Dokumentacja dla przekierowania: http://api.rubyonrails.org/classes/ActionController/Redirecting.html – Nate

+12

Dla Rails 5, 'redirect_to: back' jest przestarzałe i zostanie usunięte w 5.1, a zamiast tego' redirect_back (fallback_location: fallback_location) 'powinno być użyte. – DuckNG

32

Jeśli szukasz sposobu na odświeżenie strony (zazwyczaj redirect_to :back) za pomocą żądania XHR, nie musisz szukać sposobu na zmianę typu odpowiedzi - po prostu powiedz stronie, aby przeładować z wbudowany JS.

format.js {render inline: "location.reload();" }

Jak Elena wspomina, powinno to iść w bloku respond_to, tak:

respond_to do |format| 
    format.js {render inline: "location.reload();" } 
end 
10

Archonic jest odpowiedź powyżej pracował dla mnie. Jednak w Rails 3, musiałem umieścić to w respond_to bloku, w celu uniknięcia 'ArgumentError (zbyt mało argumentów)' error:

respond_to do |format| 
    format.js {render inline: "location.reload();" } 
end 
8

W Rails 5 redirect_to :backis improved przez:

redirect_back(fallback_location: root_path) 
1

Od Rails 5 (lub starszych wersji), masz metodę request.referrer. Po prostu przekierowujesz z kontrolera do strony odsyłającej i otwiera się strona, z której pochodzi żądanie.

redirect_to request.referrer, notice: "You're being redirected"