43

У меня есть следующий код в контроллере Rails:Как отображать уведомление Rails при перенаправлении?

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

Тогда в представлении/check_in:

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

Однако, уведомление не отображается. Работает идеально, если я не перенаправлять в контроллере:

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

мне нужен редирект, хотя ... не просто предоставление этого действия. Могу ли я получить уведомление о вспышке после перенаправления?

ответ

89

Удалить «.now». Так что просто напишите:

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

Предполагается, что использование .now предназначено для использования только в том случае, если вы просто выполняете рендеринг, а не перенаправляете. При перенаправлении нельзя использовать .now.

+0

Отлично! Благодарю. Это заставляет меня ждать еще 6 минут, чтобы принять ответ по какой-то причине ... –

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

вместо :alert вы можете использовать :notice

для отображения

9

Или вы можете сделать это в одной строке.

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

@ JayEl-Kaake, какую рубиновую версию вы используете? – etlds

+0

Это было давно, поэтому я не уверен ... Я отредактирую свой комментарий, так как похоже, что это должно сработать. –

+1

Путь, вспышка: {уведомление: ... похоже, Rails 3, а путь, предупреждение: ... есть Rails 4+ –

3

У меня была такая же проблема, и ваш вопрос решается моя, потому что я забыл включить в представлении/check_in:

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

В контроллере, только одну строку:

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

твой - другая проблема.У меня был тег '<%= notice %>', ничего не возникало –

3

Это будет работать слишком

redirect_to check_in_path, notice: 'Successfully checked in'

1

Если вы используете Bootstrap, на странице будет отображено флэш-сообщение с отформатированным отформатированным изображением, целью которого является перенаправление.

В контроллере:

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

На ваш взгляд:

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

Это будет производить HTML, как:

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

Для доступных стилей оповещения Bootstrap см: http://getbootstrap.com/docs/4.0/components/alerts/

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