gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 01:49:05 25 4
gpt4 key购买 nike

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 文档。由于所描述的行为,我总是有两个端点定义用于每个资源的更新请求( PUTPATCH )。此外,由于这是一条可能会弃用的路线,我希望我的 API 从今天起不再支持它。

更新 由于第一个答案朝着错误的方向前进,我想澄清一下:我不想删除“更新”操作,而只想删除过时的 PUT 路由,同时保留 PATCH 路由。

最佳答案

回答我自己的问题:不,目前无法在 rails 4 中禁用 PUT/PATCH 组合的默认生成,这在查看 ActionDispatch::Routing 的来源时可以清楚地看到 https://github.com/rails/rails/blob/master/actionpack/lib/action_dispatch/routing/mapper.rb尤其是那些行:

      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 .

关于ruby-on-rails - 是否可以禁用 Rails 4 中的标准 PUT 路由?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24081946/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com