2012-01-12 53 views
0

我已經建立了這樣的路線 -重定向到自定義路徑上未能upate

match "/:id" =>"car#edit", :as => :edit_car 
    match "/:id/thanks" =>"cars#thanks", :as => :thanks 

www.myurl.com/12345會去汽車的編輯操作。

我的更新動作看起來像這樣

def update 
    @car = Car.find(params[:id]) 
    respond_to do |format| 
    if @car.update_attributes(params[:car]) 
     format.html { redirect_to(thanks_path(@car)) } 
    else 
     format.html { render action: "edit" } 
    end 
    end 
end 

在成功更新其重定向到www.myurl.com/12345/thanks - 這是很好的 - 如預期工作。

然而,當有錯誤,同時更新它呈現編輯行動 -

www.myurl.com/cars/12345 

我想它重新呈現編輯行動 -

www.myurl.com/12345 

我想化妝確保錯誤消息仍然通過。這可能嗎?

+0

你能描述一下你在哪裏提交表單,即。更新操作的路線?這可能與編輯操作不同,因此您從更新操作中呈現編輯操作時看到的路徑不一樣。 – mark 2012-01-12 11:11:44

+0

我將模型設置爲資源 - 所以它使用rails的標準安靜系統。除了我的改變。這是你要求的嗎? – Finnnn 2012-01-12 11:26:57

回答

1

您所看到的路線是資源路線的編輯動作,而不是您單獨定義的編輯動作。因此它將控制器包含在路徑中。

如果你想,路徑不包括汽車控制器,你可以包括在此路線定義:

resources :cars, :path => '/' 

從以往的經驗我勸你不要做,因爲事情變得混亂,當你想擴展你的應用程序

我建議你不要使用定義的編輯操作,並從資源路徑的顯示操作中編輯你的汽車。此外,您可以通過更新操作顯示成功消息,而無需通過更新視圖文件進行重定向。

如果你想重定向可以修改資源路線像這樣:

resources :cars, :path => '/' do 
    member do 
    get 'thanks' 
    end 
end