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

Shi*_*hiv 3 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
Run Code Online (Sandbox Code Playgroud)

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

now*_*owk 16

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

<%= flash[:message] %>
Run Code Online (Sandbox Code Playgroud)

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

  • 好吧flash.now只适用于当前的动作状态,一旦你移动它就会被清除.因此,如果您在另一个请求中需要它,那么flash [..]将是您想要使用的.由于你的重定向,闪存[..]不起作用.我想知道你的应用程序是否会遇到一些会话问题. (6认同)

EmF*_*mFi 5

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

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

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