在我的Rails3应用程序中,我为edit
我的Post
模型添加了一个特定匹配项:
match '/edit' => 'posts#edit', :as => 'post_edit'
因此,我覆盖了edit
操作的默认路径。 - 现在,如果update
操作中出现任何错误,它将呈现edit
操作,并使用默认edit
路径/posts/1
设置网址路径。
如何通过将网址路径设置为edit
而不是/edit
来覆盖提取posts/1
操作的内容。
答案 0 :(得分:0)
您实际上看到的是“更新”的网址,编辑的默认路径为/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
请注意,将整个对象保存在会话中(特别是大对象)是不好的做法,因此您可能只想使用flash发送错误消息字符串并在视图中呈现它。这些都是相当邪恶的方法,但我并没有真正看到这样做的优雅方法。
出于好奇,您为什么要更改默认网址?有必要吗?