代码之家  ›  专栏  ›  技术社区  ›  Shiv

闪光[注意]不在轨道上工作

  •  3
  • Shiv  · 技术社区  · 16 年前

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

      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 回复  |  直到 8 年前
        1
  •  16
  •   nowk    16 年前

    您的控制器正在重定向到:action=>'contact'。确保为该操作呈现的模板具有flash notice输出。

    <%= flash[:message] %>
    

    另外,您可能需要使用render:action…vs重定向到:操作….给自己留个请求。

        2
  •  5
  •   EmFi    16 年前

    flash散列可以包含任何要保存到下一次呈现的消息集。脚手架通常使用flash[:notice]的内容作为通知消息。如果不使用scaffold生成网页,则必须添加 <%= flash[:notice]%> 你的观点。

    您正在控制器中设置flash[:message]。所以除非你的视图包含 <%= flash[:message]%> 某处。

    你可能的解决方案是改变 flash[:message] 到 flash[:notice] 在控制器中或添加 <%=flash[:消息]%gt; 此操作可以呈现的任何视图。

        3
  •  3
  •   Anand Shah    16 年前

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

    <% if flash[:messsage].blank? %>
      <h1> flash hash is blank </h1>
    <% end %>
    

    如果你在浏览器中看到“flash hash是空的”,你就知道它的意思了。

    编辑 -

    文档中的一些内容“只要记住:它们将在执行下一个操作时消失”。

    flash.keep(:message) #keep the flash entry available for the next action
    
        4
  •  0
  •   Andrew    8 年前

    我最近遇到一个场景,flash消息将不会被保留。这种情况是在提交不包含csrf令牌字段的表单时发生的。rails将无法验证csrf令牌,因此它不会保留flash消息。如果您使用的是纯html表单,请使用 form_tag 帮助程序自动为您添加此字段。

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