闪存通知持续存在于rails控制器中

时间:2011-10-14 20:05:35

标签: ruby-on-rails ruby-on-rails-3

我有一个控制器,其中包含更新模型属性的更新方法,如果成功则为用户设置闪存通知,然后再次呈现编辑页面。当我加载/呈现页面时,我点击相同闪存通知的下一个链接会再次弹出。这是怎么回事?如何让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  

2 个答案:

答案 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以获取有关这两种方法之间差异的更多信息。