查看后Flash不会清除

时间:2013-11-16 04:03:52

标签: ruby-on-rails

这是我的创建动作。它创建一个Message的新实例,并使用模型验证进行检查。

然后有一个简单的if else循环,如果模型验证已经完成则发送消息,如果他们想要发送另一个,则呈现“新”视图。如果未满足模型验证,则只需再次呈现“新”视图。

如果邮件成功,flash哈希也会填充相关信息,成功消息和警告消息。

  def create
    @message = Message.new(message_params)

    if @message.valid?

      Contactform.contact(@message.name, @message.town, @message.email, @message.content).deliver
      flash[:success] = "Sent message"
      render 'new'

    else

      flash[:alert] = "Alert"
      render 'new'  

    end
  end

然而,我不认为我做得对,因为消息留在闪光灯中。他们被查看一次后就不会被清除。

我应该如何确保闪光灯应该清除?

更新

这就是错误的产生方式。我成功发送了一条消息,然后我回到了“新”视图,我收到了一个'成功'的闪存。我尝试发送错误消息,然后我回到“新”视图,我收到了之前的'成功'闪光和'警报'闪光。对用户来说非常困惑!

第二个我浏览到另一个页面,两个闪烁消失,但这是我认为的问题。与返回同一页面有关,因此Rails不知道要清除闪存。我可以强行清除闪光灯吗?

1 个答案:

答案 0 :(得分:7)

我想在rails doc中阅读有关flash.now的部分将有助于为您解决此问题:http://guides.rubyonrails.org/action_controller_overview.html#flash-now

Flash会为下一个请求而坚持下去。在这种情况下,您不是在创建操作后发出新请求 - 您只是重新呈现new视图。我想flash.now就是你想在这里使用的。

我还要说,在你的创建成功案例中,创建操作应该是重定向而不是仅仅重新渲染视图。 Are redirect_to and render exchangeable?解释了重定向和渲染之间的区别