我有一个控制器,其中包含更新模型属性的更新方法,如果成功则为用户设置闪存通知,然后再次呈现编辑页面。当我加载/呈现页面时,我点击相同闪存通知的下一个链接会再次弹出。这是怎么回事?如何让flash [:notice]只显示一次?为什么它会持续进入下一个响应?
控制器:
def update
respond_to do |format|
if @resource.update_attributes(params[:resource])
flash[:notice] = "Resource successfully updated"
format.html{ render :action => "edit" }
else
format.html{ render :action => "edit" }
end
end
end
答案 0 :(得分:12)
如果您希望立即显示Flash通知,请使用flash.now[:notice]
代替flash[:notice]
。默认行为是保存闪存直到后续请求被处理,now
版本将在当前请求完成后将其清除。
答案 1 :(得分:2)
成功编辑后,您不应该使用render
方法。而是尝试使用redirect_to
:
respond_to do |format|
if @resource.update_attributes(params[:resource])
flash[:notice] = "Resource successfully updated"
format.html{ redirect_to :action => edit, :id => @resource }
else
format.html{ render :action => "edit" }
end
end
检查Rails Guide以获取有关这两种方法之间差异的更多信息。