2010-12-09 91 views
1

行動在我的Rails3中的應用我添加特定的比賽爲editPost模型:的Rails:渲染與特定的路徑

match '/edit' => 'posts#edit', :as => 'post_edit' 

所以,我覆蓋edit行動的默認路徑。 - 現在,如果在update操作中發生任何錯誤,它將呈現edit操作,並將URL路徑設置爲默認edit路徑/posts/1

如何覆蓋它以呈現edit操作,並將URL路徑設置爲/edit而不是posts/1

回答

0

您實際上正在看到「更新」的URL,編輯的默認路徑爲/posts/1/edit。我認爲您無法使用render :action更改網址的顯示內容。另一種方法雖然稍微鬆懈,但可以在會話或Flash中重定向並保存@post對象。如果您未保存@post對象,則將丟失更新中的錯誤消息。

if @post.update_attributes(params[:post]) 
    #business as usual 
else 
    session[:post] = @post 
    redirect_to post_edit(@post) 
end 

請注意,這是不好的做法,保存在會話(尤其是大的物體)整個對象,所以你可以改爲只想使用閃光燈發送錯誤消息的字符串,並渲染視圖。這些都是相當黑客的方法,但我真的看不到一個優雅的方式來做到這一點。

出於好奇,爲什麼要更改默認的URL?有必要嗎?

+1

其實,url會`/ posts/1/edit` – nathanvda 2010-12-09 20:31:40