当对对象执行(公共)部分更新时,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 举报,一经查实,本站将立刻删除。