查看后Flash不会清除

这是我的创作动作。 它创建Message的新实例,使用模型validation进行检查。

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

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

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不知道要清除闪存。 我可以强制清除闪光灯吗?

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

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

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