2010-12-09 79 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