当对对象执行(公共)部分更新时,Rails 4已经将PATCH请求引入了默认请求方法.这是符合HTTP标准和一个好的(较老的)帖子讨论这个决定可以在这里找到:
http://weblog.rubyonrails.org/2012/2/25/edge-rails-patch-is-the-new-primary-http-method-for-updates/
当您在config / routes.rb中定义资源时,就像
resources :books
那么在rails 4中,默认情况下会创建以下路由:
GET /books books#index GET /books/:id books#show POST /books books#create DELETE /books/:id books#destroy PATCH /books/:id books#update PUT /books/:id books#update
当我开发一个新的应用程序,而不必关心向后兼容性时,我想删除过时的PUT路由.
有没有一个简单的方法来完成这个在config / routes.rb?
解释为什么这个PUT路由打扰了我:我正在使用swagger-docs gem自动生成一个用于我的API的swagger文档.由于所描述的行为,对于每个资源,我总是有更新请求(PUT和PATCH)的两个端点定义.另外,由于这是一个潜在的贬低路线,我希望我的API不支持从今天起.
UPDATE由于第一个答案标题错误的方向我想澄清:我不想删除’更新’动作,但只是过时的PUT路由,同时保持PATCH路由.
解决方法
为了回答我自己的问题:不,目前不可能在rails 4中禁用PUT / PATCH组合的默认生成,当查看
https://github.com/rails/rails/blob/master/actionpack/lib/action_dispatch/routing/mapper.rb的ActionDispatch :: Routing源,特别是那些行时,可以清楚地看到:
def set_member_mappings_for_resource member do get :edit if parent_resource.actions.include?(:edit) get :show if parent_resource.actions.include?(:show) if parent_resource.actions.include?(:update) patch :update put :update end delete :destroy if parent_resource.actions.include?(:destroy) end end
显然,(目前)没有条件排除PUT路由.我将准备一个问题或提出这个请求,稍后再回来,结果是这样.
在此之前,最好的解决方法是Jorge de los Santos建议的方法,尽管这样做会污染config / routes.rb.