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

标签 ruby-on-rails ruby-on-rails-3 devise routes

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/

相关文章:

ruby-on-rails - 如何从辅助方法设置变量以包含在 SASS SCSS 样式表中?

ruby-on-rails - 更新用户名在 Devise 中不起作用

ruby-on-rails - 如何设置 rails Authenticity Token 以与多个域一起使用?

ruby-on-rails - Rails 回形针 : How can you convert a public_read file to private?

javascript - 无法访问窗口/全局变量 - 似乎未定义

ruby-on-rails - Rails devise 应用程序为移动应用程序创建 REST api

ruby-on-rails-3 - 使用 before_filter 检查管理员或用户是否已登录

ruby-on-rails - ActiveAdmin 登录页面

ruby-on-rails-3 - 使用自定义处理程序的 Rails 部分模板正在转义 html

ruby-on-rails-3 - 更改 URL 而不更改资源名称