Как отобразить флэш-уведомление 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'

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




Ответы (6)


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

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

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

person Rebitzele    schedule 20.03.2013
comment
Идеально! благодаря. Это заставляет меня ждать еще 6 минут, чтобы принять ответ по какой-то причине... - person at.; 21.03.2013

redirect_to new_user_session_path, alert: "Invalid email or password"

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

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

person Tauqeer Ahmad    schedule 21.03.2013

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

redirect_to check_in_path, flash: {notice: "Successfully checked in"}
person etlds    schedule 12.12.2014
comment
@ JayEl-Kaake, какую рубиновую версию ты используешь? - person etlds; 03.03.2016
comment
Это было давно, поэтому я не уверен... Я отредактирую свой комментарий, так как похоже, что это должно сработать. - person Jay El-Kaake; 07.03.2016
comment
path, flash: {примечание: ... похоже на Rails 3, а path, alert: ... это Rails 4+ - person Simon B.; 12.12.2016
comment
Хорошее решение, так как оно также допускает различные типы сообщений, например. вспышка: {успех: текст} - person fydelio; 02.02.2019

Если вы используете 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/

person Jon Schneider    schedule 05.10.2017

Это тоже сработает

redirect_to check_in_path, notice: 'Successfully checked in'

person Seifer    schedule 25.05.2016

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

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

В контроллере всего одна строка:

redirect_to check_in_path, :notice => "Successfully checked in"             
person Florencio Lugo    schedule 08.02.2015
comment
у вас другая проблема. У меня был тег <%= notice %>, просто ничего не подходило - person at.; 09.02.2015