如何在我的视图中显示闪烁[:notice]?

时间:2017-09-05 20:11:30

标签: ruby-on-rails redirect view ruby-on-rails-5 notice

我很难在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 %>

但是尽管我知道通知已经设置(我在我的网址中看到它),但我的视图中没有调用上面的内容(我看不到带有class="flash-notice"的HTML)。

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

2 个答案:

答案 0 :(得分:1)

您当前正在使用键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参数传递,否则我建议您这样做。

答案 1 :(得分:0)

尝试

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

我很确定

redirect_to edit_user_path(user), notice: 'bla'

也会奏效。出于某种原因,您的语法显然不会选择通知修饰符。但是,您必须将用户分配给当前用户才能使其显然正常工作。