Flash-сообщение в перенаправлении не работает
В моем контроллере есть следующее:
redirect_to signin_path, :notice => "The email is already registered"
На мой взгляд, у меня
<%= flash[:notice] if flash[:notice] %>
Но флэш-сообщение не появляется.
Однако, если я делаю следующее в контроллере
flash[:notice] = "There is already an acount for this email. Please Login to create your board."
redirect_to signin_path
Он работает.
В чем причина, почему первая не работает?
Ответы
Ответ 1
Сделайте несколько хвостов в ваших журналах и посмотрите, не перенаправлены ли вы на несколько действий перед рендерингом. Если это так, вероятно, вспышка не будет храниться достаточно долго, чтобы перейти к представлению, в котором оно наконец отображается.
Хорошо расположенный flash.keep(:notice)
должен сделать трюк.
Много позже отредактируйте: Кроме того, в ретроспективе, если вы перенаправляете это много раз, я настоятельно рекомендую вам сделать рефакторинг и устранить любые ненужные переходы, объединив логику перенаправления на более высоком уровне, так что ваши перенаправления предопределены и происходят только один раз, два раза максимум.
Ответ 2
простой, но эффективный:
изменить ApplicationController < ActionController:: Base следующим образом:
alias :std_redirect_to :redirect_to
def redirect_to(*args)
flash.keep
std_redirect_to *args
end
Ответ 3
Лучший подход - написать эту строку в файле views/layouts/application.html.erb
<%= notice %>
<%= alert %>
и напишите
layout 'application'
в контроллерах
Ответ 4
В вашем контроллере используйте:
redirect_to signin_path, :notice => "There is already an acount for this email. Please Login to create your board."
В вашем макете приложения используйте:
<%= notice %>