43

Mam następujący kod w kontrolerze RailsJak wyświetlić powiadomienie Flash Rails po przekierowaniu?

flash.now[:notice] = 'Successfully checked in' 
redirect_to check_in_path 

Następnie w widoku/check_in:

<p id="notice"><%= notice %></p> 

Jednak informacja nie pojawi. Działa doskonale, jeśli nie przekierowuję w kontrolerze:

flash.now[:notice] = 'Successfully checked in' 
render action: 'check_in' 

Potrzebuję przekierowania chociaż ... nie tylko renderowania tego działania. Czy mogę mieć powiadomienie Flash po przekierowaniu?

Odpowiedz

89

Usuń ".now". Więc po prostu napisać:

flash[:notice] = 'Successfully checked in' 
redirect_to check_in_path 

.Teraz jest specjalnie powinien być stosowany, gdy jesteś po prostu renderowania i nie przekierowuje. Podczas przekierowywania nie należy używać .now.

+0

Idealnie! dzięki. Czeka mnie jeszcze 6 minut, aby zaakceptować odpowiedź z jakiegoś powodu ... –

20
redirect_to new_user_session_path, alert: "Invalid email or password" 

zamiast :alert można użyć :notice

wyświetlać

9

Można to zrobić w jednej linii.

redirect_to check_in_path, flash: {notice: "Successfully checked in"} 
+0

@ JayEl-Kaake jakiego używasz wersji ruby? – etlds

+0

Minęło trochę czasu, więc nie jestem pewien ... Zmienię komentarz, ponieważ wygląda na to, że powinien zadziałać. –

+1

ścieżka, flash: {notice: ... wygląda jak Rails 3, podczas gdy ścieżka, alert: ... to Rails 4+ –

3

miałem ten sam problem, a pytanie rozwiązany kopalnię, bo zapomniał włączyć w widoku/check_in:

<p id="notice"><%= notice %></p> 

w sterowniku, tylko jedną linię:

redirect_to check_in_path, :notice => "Successfully checked in"    
+0

twój jest inny problem.Miałem tag '<%= notice %>', nic już nie nadchodziło –

3

będzie to działać zbyt

redirect_to check_in_path, notice: 'Successfully checked in'

1

Jeśli używasz Bootstrap, to wyświetli ładnie sformatowaną wiadomość flash na stronie, która jest celem przekierowania.

W kontrolerze:

if my_success_condition 
    flash[:success] = 'It worked!' 
else 
    flash[:warning] = 'Something went wrong.' 
end 
redirect_to myroute_path 

W widoku:

<% flash.each do |key, value| %> 
    <div class="alert alert-<%= key %>"><%= value %></div> 
<% end %> 

Ta HTML będzie produkować jak:

<div class="alert alert-success">It worked!</div> 

Dla dostępnych stylów alarmowych Bootstrap, patrz: http://getbootstrap.com/docs/4.0/components/alerts/

Dotyczy: https://agilewarrior.wordpress.com/2014/04/26/how-to-add-a-flash-message-to-your-rails-page/

Powiązane problemy