POST与/ pubs /:id的PUT相同,或RAILS中是否存在隐式路由

时间:2014-07-23 18:58:46

标签: ruby-on-rails-3

我使用

生成简单的pubs _edit表单
= form_for @pub do |f|
  - if @pub.errors.any?
  -# fields

获取/ldc/pubs/1/edit(ldc - >命名空间) 表单标签获得POST(?):

<form id="edit_ldc_pub_1" class="edit_ldc_pub" method="post" action="/ldc/pubs/1" accept-charset="UTF-8">

一切都很好,但没有路由:

... others
                          DELETE          /ldc/pubowners/:id(.:format)                             ldc/pubowners#destroy
                 ldc_pubs GET             /ldc/pubs(.:format)                                      ldc/pubs#index
                          POST            /ldc/pubs(.:format)                                      ldc/pubs#create
              new_ldc_pub GET             /ldc/pubs/new(.:format)                                  ldc/pubs#new
             edit_ldc_pub GET             /ldc/pubs/:id/edit(.:format)                             ldc/pubs#edit
                  ldc_pub GET             /ldc/pubs/:id(.:format)                                  ldc/pubs#show
                          PUT             /ldc/pubs/:id(.:format)                                  ldc/pubs#update
                          DELETE          /ldc/pubs/:id(.:format)                                  ldc/pubs#destroy

不应该有错误吗?

这不是问题,因为PUT和POST在某种程度上是多余的,包括存在:id

但我可以依靠吗?为什么要渲染一个POST?

1 个答案:

答案 0 :(得分:0)

最后一个问题:

呈现“post”是因为你在表单字段中只有GET和POST作为选项。

标题问题:

你缺少的是有一个隐藏的值,例如,

<input name="_method" type="hidden" value="put" />

form_for助手呈现。 Rails使用_method的值来查找正确的路由。

浏览器中的HTTP方法是一个POST,但Rails使用_method(如果存在)。