如何在重定向时显示Rails闪存通知?

时间:2013-03-20 20:33:41

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2 ruby-on-rails-4 rails-flash

我在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 个答案:

答案 0 :(得分:104)

删除“.now”。所以写一下:

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

.now特别应该在您只是渲染而不是重定向时使用。重定向时,不使用.now。

答案 1 :(得分:32)

redirect_to new_user_session_path, alert: "Invalid email or password"

代替:alert您可以使用:notice

显示

答案 2 :(得分:15)

或者你可以在一行中完成。

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

答案 3 :(得分:4)

这也会起作用

redirect_to check_in_path, notice: 'Successfully checked in'

答案 4 :(得分:4)

如果您使用的是Bootstrap,则会在您重定向的目标页面上显示格式正确的Flash消息。

在您的控制器中:

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>

有关可用的B​​ootstrap警报样式,请参阅: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/

答案 5 :(得分:2)

我有同样的问题,你的问题解决了我的问题,因为我忘了在/ check_in视图中包含:

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

在控制器中,只需一行:

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