微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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.

原文地址:https://www.jb51.cc/ruby/267198.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐