flash [:notice]在Rails中不起作用

时间:2009-11-22 17:49:57

标签: ruby-on-rails

我的控制器中有以下代码片段

  def create
    @message = Message.new(params[:message])
    @message.message = h(@message.message)
    if @message.save
       flash[:message] = "Message Sent. Thank You for Contacting Me"
    else
       flash[:message] = "OOps Something went wrong"
    end
    redirect_to :action => 'contact'
  end

当我尝试在联系表单中显示flash消息时,它不会显示。我查找了可能的解决方案,但它们似乎不起作用。出了什么问题?

4 个答案:

答案 0 :(得分:16)

您的控制器正在重定向到:action => '联系'。确保为该操作呈现的模板具有闪存通知输出。

<%= flash[:message] %>

此外,您可能希望使用render:action ... vs redirect_to:action ....为自己保存一个请求。

答案 1 :(得分:5)

Flash哈希可以包含要在下一次渲染之前保存的任何消息集。脚手架通常使用flash [:notice]的内容作为通知消息。如果您没有使用脚手架来生成网页,则必须在视图中添加<%= flash[:notice]%>

您正在控制器中设置flash [:message]。因此,除非您的视图在某处包含<%= flash[:message]%>,否则它不会显示在您的视图中的任何位置。

您可能的解决方案是更改控制器中flash[:message]flash[:notice]的所有内容,或者将<%= flash[:message]%>添加到此操作可以呈现的任何视图中。

答案 2 :(得分:3)

不是说你不会尝试它,但如果我是你,我会做点像

这样的事情。
<% if flash[:messsage].blank? %>
  <h1> flash hash is blank </h1>
<% end %>

如果您在浏览器中看到“flash hash is blank”,您就知道这意味着什么。

修改: -

来自文档的东西“只记得:到下一个动作执行时它们就会消失。”在控制器中试试这个

flash.keep(:message) #keep the flash entry available for the next action

答案 3 :(得分:0)

我最近遇到了一种情况,即Flash消息将不被保留。这种情况是在提交不包含CSRF令牌字段的表单时。 Rails将无法验证CSRF令牌,因此它将不会保留Flash消息。如果您使用的是纯HTML表单,请使用form_tag帮助程序为您自动添加此字段。

<%= form_tag '/example/url' do %>
  <input name="example">
  <input type="submit" value="Submit the Form">
<% end %>