如何让 flash[:notice] 显示在我的视图中?

How do I get flash[:notice] to display in my view?

我很难让我的通知显示在我的 Rails 5 视图中。我在控制器中设置了这个 before_filter 方法:

def check_email_confirmed!
  redirect_to controller: "users", action: "edit", notice: 'Please confirm your email.' unless current_user.email_confirmed
end

在我看来我有这个

<% if flash[:notice] %>
  <p class="flash-notice"><%= flash[:notice] %></p>
<% end %>

但尽管我知道通知已设置(我在我的 URL 中看到了),但在我看来上面没有被调用(我没有看到 HTML class="flash-notice").

有没有其他方法可以在重定向中设置 flash 通知?或者我是否应该使用重定向(有人告诉我在 URL 查询字符串中嵌入消息可能存在一些安全风险)?

尝试

flash[:notice] = 'bla'
redirect_to controller: "users", action: "edit"

我很确定

redirect_to edit_user_path(user), notice: 'bla'

也可以。出于某种原因,您的语法显然没有选择 notice 修饰符。但是您必须将用户分配给您当前的用户才能使其正常工作。

您目前正在使用密钥 notice 设置参数,而不是在您的会话中设置闪光灯。

要按照您的方式完成此操作,您必须这样做:

<p class="flash-notice"><%= params[:notice] %></p>

我开发的大多数 Rails 应用程序都在控制器方法中设置了 session[:flash],在这种情况下,您可以这样做:

unless current_user.email_confirmed
  redirect_to edit_user_path(current_user)
  flash[:notice] = 'Please confirm your email.'
end

除非您有充分的理由将通知文本作为 URL 参数传递,否则我建议您这样做。