Ruby on Rails表示提交到/object.1而不仅仅是/ object的操作

时间:2011-01-15 18:54:20

标签: ruby-on-rails routing

https://gist.github.com/781133

我有一个应该提交到“/ site /:id / detail”的表单,但当我查看表单操作时,它会显示“/site/:id/detail.1”并在点击更新后动作(我不使用网络创建,所以我无法测试)最终在“/site/:id/detail.1”,但我需要在“/site/:id/detail".

我已经包含了表单,更新操作和我的应用程序的路由。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

问题在于Rails如何处理路径助手。当您创建单个resource路由时,它仍会创建resource_path帮助程序,但它不会期望对象参数,因为它是单个资源,而不是集合。传入@path对象时,其ID将用作生成路径的格式。

而不是redirect_to resource_path(@resource)使用redirect_to resource_path,其中“single_resource”是此结构所基于的模型的名称。

因此,在您的代码中,您可能希望将此部分切换为以下内容...

if @detail.update_attributes(params[:detail])
  format.html { redirect_to(site_detail_path, :notice => 'Details Updated!') }
  format.js { render :layout => false}
else          
  format.html { redirect_to(site_detail_path, :notice => 'Details Not Updated.') }
  format.xml { head :ok }
end