ruby-on-rails – 是否可以禁用Rails 4中的标准PUT路由?

当对对象执行(公共)部分更新时,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.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...