如何在重定向时显示 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'

我需要一个重定向... 不只是一个渲染的行动。我可以有一个闪光通知后,重定向?

92586 次浏览

删除 .now。所以只要写:

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

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

redirect_to new_user_session_path, alert: "Invalid email or password"

你可以用 :notice代替 :alert

展示

或者你可以一句话说完。

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

我也遇到了同样的问题,你的问题解决了我的问题,因为我忘记在/check _ in 视图中加入:

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

在控制器中,只有一行:

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

这个也可以

Redirect _ to check _ in _ path,注意: “已成功检入”

如果您正在使用 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>

有关可用的 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/