【问题标题】:How to programmatically list all devise routes如何以编程方式列出所有设计路线
【发布时间】:2015-06-05 15:27:06
【问题描述】:

我正在使用 devise 在我的 Rails 4.1.9 应用程序中验证我的用户。

我需要在一个 javascript 文件中列出所有设计路线。

我试图做这样的事情:

all_routes = Rails.application.routes.routes.map do |route|
    route.path.spec.to_s.gsub('(.:format)', '')
end

这只是打印所有铁路路线。我怎样才能只得到设计的?

我试图检查控制器,但我不知道该怎么做......

【问题讨论】:

    标签: ruby-on-rails ruby devise routes


    【解决方案1】:

    使用路由控制器来确定路由是否属于设计控制器:route.defaults[:controller],如果您要自定义或跳过自己的默认路由,这可能会变得很棘手:

    一旦您拥有控制器,例如:"devise/sessions",应该很容易询问它是 .starts_with? "devise" 还是类似的东西。我希望这会有所帮助!

    【讨论】:

    • 上面第二行可以改成如下:route.path.spec.to_s.gsub('(.:format)', '') if route.defaults[:controller] && route.defaults[:controller].include?('devise')
    【解决方案2】:

    这可能是一种可靠的方法。即使在自定义控制器的情况下,它也应该可以工作。

    # 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
    

    【讨论】:

      猜你喜欢
      • 2010-11-19
      • 2022-01-27
      • 2019-09-23
      • 1970-01-01
      • 2010-12-06
      • 2015-06-18
      • 2011-04-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多