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/