查看后Flash不会清除

Sta*_*ers 6 ruby-on-rails

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

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

如果消息成功,则闪存哈希还会填充相关信息,成功消息和警报消息.

  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
Run Code Online (Sandbox Code Playgroud)

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

我应该如何确保闪存清除,应该是什么?

更新

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

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

小智 7

我想在rails doc中阅读关于flash.now的部分将有助于为您清除这一点:http://guides.rubyonrails.org/action_controller_overview.html#flash-now .

Flash会响应下一个请求.在这种情况下,您不是在创建操作后发出新请求 - 您只是重新渲染new视图.我想flash.now就是你想要在这里使用的东西.

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