68

我在 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'

不过,我需要重定向……而不仅仅是该动作的渲染。重定向后我可以有一个快速通知吗?

4

6 回答 6

124

删除.now. 所以只要写:

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

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

于 2013-03-20T20:39:58.637 回答
40
redirect_to new_user_session_path, alert: "Invalid email or password"

代替:alert你可以使用:notice

显示

于 2013-03-21T10:52:12.803 回答
20

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

redirect_to check_in_path, flash: {notice: "Successfully checked in"}
于 2014-12-12T16:10:55.453 回答
11

这也可以

redirect_to check_in_path, notice: 'Successfully checked in'

于 2016-05-25T13:49:39.413 回答
11

如果您使用的是 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>

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

于 2017-10-05T20:41:03.880 回答
3

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

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

在控制器中,只有一行:

redirect_to check_in_path, :notice => "Successfully checked in"             
于 2015-02-08T18:44:40.063 回答