2012-06-16 38 views
2

我一直在3.2.3建立一個應用程序,它工作正常,只要我升級到3.2.6以解決安全漏洞,我的一個路由停止工作。Rails 3.2.6路由不再工作

這是一個簡單的視圖,當我點擊編輯塊對象時,它會將我帶到編輯屏幕。然而,當我做出改變,並點擊提交我收到此錯誤:

Routing Error 

No route matches {:action=>"edit", :controller=>"units", :id=>nil} 

在我的控制器有一個編輯和更新操作:

def edit 
    @units = Unit.find(params[:id]) 
    end 

def update 
    @units = Unit.find(params[:id]) 

    respond_to do |format| 
     if @units.update_attributes(params[:unit]) 
     format.html { redirect_to @units, notice: 'Unit was successfully updated.' } 
     format.json { head :no_content } 
     else 
     format.html { render action: "edit" } 
     format.json { render json: @units.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

在更新動作,如果我改變redirect_to的@units到redirect_to units_path錯誤消失。在3.2.6中有什麼改變,不會讓你像我一樣重定向?我有另一個具有完全相同的編輯和更新操作的控制器,並且它可以正常工作。

我有兩個筆記本電腦一個3.2.3和另一個3.2.6。 3.2.3正常工作,但只要我升級它,我得到了同樣的錯誤。

任何幫助表示讚賞。

+0

你可以請你的觀點? –

回答

0

是的,從redmine報告了類似的問題...但它確實是您自己的代碼中已經暴露的錯誤的問題。某處你有一個nil被傳遞給一個路徑函數,這個函數應該總是一個錯誤但不是,而是在請求中使用了其他參數(這有時候是正確的)。

通讀該鏈接以獲得全面的獨家新聞。

我不確定看到這段代碼,如果它真的在這裏沒有看到完整的堆棧跟蹤...很難想象@units在這一點上是零,所以可能還有其他一些涉及。

這並非超級重要,但在您的命名約定中,​​將更適合編輯和更新操作,而不是@units,因爲只應該編輯一個單元。控制器的名稱是什麼?

+0

謝謝DGM。我將我的命名約定更改爲@unit和相應的視圖代碼。控制器名稱是units_controller。我想現在我必須弄清楚是什麼導致它通過了零。我可以通過它,但我想確保它不會在以後的屁股上咬我。 – nulltek

+0

我想知道如果真正的錯誤是在您的顯示頁面,也許你有一個edit_units_path()調用。我敢打賭,這個電話的價值是零。 – DGM

+0

OR ...沒有ID字段。單元是否具有名爲id的默認主鍵? – DGM