flash 在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消息时,它不会显示。 我查找了可能的解决方案,但它们似乎不起作用。 出了什么问题?

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

 <%= flash[:message] %> 

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

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

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

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

不是说你不会尝试它,但如果我是你,我会做一些事情

 <% if flash[:messsage].blank? %> 

flash hash is blank

<% end %>

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

编辑 : –

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

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

我最近遇到了一个不会保留flash消息的场景。 此方案是在提交不包含CSRF令牌字段的表单时。 Rails将无法validationCSRF令牌,因此它不会保留Flash消息。 如果您使用的是纯HTML表单,请使用form_tag帮助程序自动为您添加此字段。

 <%= form_tag '/example/url' do %>   <% end %>