2012-06-27 69 views
8

我有一個動作「批准」,呈現一個視圖,顯示模型(類)的一些內容。在視圖中,我有一個link_to,它使用URL參數(:id)調用acceptaccept操作完成後(設置爲true),我想再次顯示approval並顯示一條消息(「已保存!」)。但是,與靜態登錄頁面不同,審批操作在第一次調用時需要param。第二次渲染時,會發生運行時錯誤(顯然)。使用flash通知請撥打approval的最佳方法是什麼?呈現一個動作:通知取決於一個URL參數

def approval 
    @c = Class.find(params[:id]) 
end 


def accept 
    @c = Class.find(params[:id]) 
    @c.approve = true 
    @c.save 

    render 'approval', :notice => "Saved!" 
end 
+0

運行時錯誤不傳遞到找到@c在第二次。所以你可以通過身份證。 –

回答

7

改變這個render 'approval', :notice => "Saved!"

flash[:notice] = "Saved!" 
redirect_to :back 
+0

什麼是:back代表? –

+0

:返回 - 發回請求的頁面。對於從多個地方觸發的表單很有用。 redirect_to(request.env [「HTTP_REFERER」])的簡寫 – abhas

1

Exceprt來自:http://www.perfectline.ee/blog/adding-flash-message-capability-to-your-render-calls-in-rails

現在在控制器中的常見模式如下:

if @foo.save 
    redirect_to foos_path, :notice => "Foo saved" 
else 
    flash[:alert] = "Some errors occured" 
    render :action => :new 
end 

我希望能夠到什麼是這樣的:

if @foo.save 
    redirect_to foos_path, :notice => "Foo saved" 
else 
    render :action => :new, :alert => "Some errors occured" 
end 

添加這個功能其實很簡單 - 我們只需要創建一些擴展渲染函數的代碼。 下一段代碼實際上擴展了包含重定向調用功能的模塊。

module ActionController 
    module Flash 

    def render(*args) 
     options = args.last.is_a?(Hash) ? args.last : {} 

     if alert = options.delete(:alert) 
     flash[:alert] = alert 
     end 

     if notice = options.delete(:notice) 
     flash[:notice] = notice 
     end 

     if other = options.delete(:flash) 
     flash.update(other) 
     end 

     super(*args) 
    end 

    end 
end 
相關問題