如何以编程方式列出所有设备路由?

4
我将使用 devise 来验证我的 Rails 4.1.9 应用程序中的用户。
我需要在 JavaScript 文件中列出所有 devise 路由。
我尝试过这样做:
all_routes = Rails.application.routes.routes.map do |route|
    route.path.spec.to_s.gsub('(.:format)', '')
end

这只是打印所有Rails路由。我该如何仅获取Devise的路由?
我尝试检查控制器,但我不知道该怎么做...
2个回答

2
使用路由控制器确定路由是否属于设备控制器:route.defaults[:controller]。如果你正在为自己定制或跳过默认路由,则可能会变得棘手:
一旦您有了控制器,例如:"devise/sessions",它应该很容易询问它是否.starts_with? "devise"或类似的内容。我希望这可以帮助到你!

1
上面的第二行可以更改为以下内容:route.path.spec.to_s.gsub('(.:format)', '') if route.defaults[:controller] && route.defaults[:controller].include?('devise') - Prakash Murthy

1
这可能是一种可靠的方法。即使在自定义控制器的情况下,它也应该起作用。
# Ask devise what controllers is has mapped
devise_controllers = Devise.mappings.values.map do |mapping|
  mapping.controllers.map{|k, v| v}}
end.flatten.uniq
# Ask rails for the routes that resolve to devise controllers
Rails.application.routes.routes.select do |route|
  devise_controllers.include? route.defaults[:controller]
end

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接