Rails:使用特定路径渲染操作

时间:2010-12-09 15:50:30

标签: ruby-on-rails-3 routes render

在我的Rails3应用程序中,我为edit我的Post模型添加了一个特定匹配项:

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

因此,我覆盖了edit操作的默认路径。 - 现在,如果update操作中出现任何错误,它将呈现edit操作,并使用默认edit路径/posts/1设置网址路径。

如何通过将网址路径设置为edit而不是/edit来覆盖提取posts/1操作的内容。

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发送错误消息字符串并在视图中呈现它。这些都是相当邪恶的方法,但我并没有真正看到这样做的优雅方法。

出于好奇,您为什么要更改默认网址?有必要吗?