ruby-on-rails – Devise路由:有没有办法从Rails.application.routes中删除路由?

devise_for创建通常的路由,包括DELETE路由。因为我们网站上有一个讨厌的错误(与IE 8不相关),我们只想完全删除DELETE路由。我们没有必要。

不幸的是,devise_for不支持:except或:only选项(从我可以看出)。

我想知道如何从Rails.application.routes中删除路由?要么在绘制块,还是后面呢?

谢谢!

编辑:上面提到的错误的一些细节

>我们正在向自定义的UJS控制器动作发出DELETE请求
>在控制器动作中,我们正在删除我们想要的,然后执行302重定向。这是一个坏主意,我们已经通过返回一些JSON来纠正它。
>一些客户端,在收到302将发出新的DELETE请求到重定向,路由到一个Devise删除路由!从而无意中删除该人!让人惊讶。我们假设这将是一个GET。坏的假设

这个bug已经修复了,但是我想删除路由。

编辑2:所以我开始一个这个问题的赏金,我真的想知道它是否可能直接在Rails上的RouteSet派对。

编辑3:这是我到底做了什么,这是由来自何塞·瓦林姆的报价中的赏金者所建议的:

在config / routes.rb中,我添加了上面的devise_for调用,其中设置了我的“人”路线的其余部分:

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

然后在我现有的people_controller.rb中,我添加了一个no-op方法:

def destroy
  render :nothing => true
end

这是可能在这种情况下工作的最简单的事情,还是呢?我仍然有点感到,没有一个简单的方法来从RouteSet中删除路由。此外,设计控制器仍然存在删除路由,但是由于rails会在config / routes.rb中找到第一个匹配并返回它,所以不会被调用。

好的,谢谢大家的帮助!

最佳答案
这是何塞·瓦林(Jose Valim)(作者)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选项,然后实现你想要的控制器的路由,而不是你没有的路由。

转载注明原文:ruby-on-rails – Devise路由:有没有办法从Rails.application.routes中删除路由? - 代码日志