gpt4 book ai didi

ruby-on-rails - 设计路由: is there a way to remove a route from Rails. application.routes?

转载 作者:行者123 更新时间:2023-12-02 12:56:46 25 4
gpt4 key购买 nike

devise_for 创建包含我们要删除的 DELETE 路由的路由,并且 devise_for 不支持 : except:仅选项。

如何从 Rails.application.routes 中删除路由?是在 draw block 中还是之后?

<小时/>

以下是错误的详细信息,这是我们需要删除路由的原因。

  • 我们向自定义 UJS Controller 操作发出 DELETE 请求

  • 在 Controller 操作中,我们删除了我们想要删除的内容,然后执行 302 重定向。这是一个坏主意,我们已经通过返回一些 JSON 来纠正它。

  • 某些客户端在收到 302 后会向重定向发出新的 DELETE 请求,该请求会路由到 Devise 删除路由!从而无意中删除了这个人!哎呀。我们假设这将是一个 GET。错误的假设。

此错误已修复,但我仍然想删除该路线。

<小时/>

这是我最终所做的,这是赏金获得者在引用 Jose´ Valim 的话中建议的:

config/routes.rb 中,我将其添加到 devise_for 调用上方,该调用设置了其余的 'people' 路线:

delete '/person', :to => 'people#destroy'

然后在现有的 people_controller.rb 中,我添加了一个无操作方法:

def destroy
render :nothing => true
end

我仍然有点恼火,没有一种简单的方法可以从 RouteSet 中删除路由。此外,设备 Controller 的删除路由仍然存在,但它不会被调用,因为rails会在config/routes.rb中查找第一个匹配项并返回它。

最佳答案

这是 Jose Valim(devise 的作者)has to say on the subject :

There is no way to remove routes individually. Or you use :skip to remove all and draw the ones you need manually or you overwrite this routes by defining a route to the same path first in your config/ routes.rb

所以对你的问题的简短回答是否定的,你不能删除那一条路线。您当然可以尝试做诸如修补 devise_for 方法之类的事情,但这将是一项有些复杂的任务(需要一天或几天的努力)。我只需使用 :skip 选项,然后为该 Controller 实现您想要的路由,并忽略您不需要的路由。

关于ruby-on-rails - 设计路由: is there a way to remove a route from Rails. application.routes?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6986861/

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