我的控制器中有以下代码片段
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消息时,它不会显示。我查找了可能的解决方案,但它们似乎不起作用。出了什么问题?
答案 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 %>