如何以编程方式列出所有设计路线
How to programmatically list all devise routes
我正在使用设计来验证我的 Rails 4.1.9 应用程序中的用户。
我需要在 javascript 文件中列出所有设计路线。
我试过这样做:
all_routes = Rails.application.routes.routes.map do |route|
route.path.spec.to_s.gsub('(.:format)', '')
end
这只是打印所有 rails 路线。我怎样才能只得到设计的?
我试图检查控制器,但我不知道该怎么做...
使用路由控制器确定路由是否属于设计控制器:route.defaults[:controller]
,如果您自定义或跳过自己的默认路由,这可能会变得棘手:
一旦你有了控制器,例如:"devise/sessions"
应该很容易询问它是否是 .starts_with? "devise"
或类似的东西。希望对您有所帮助!
这可能是一个可靠的方法。即使在自定义控制器的情况下它也应该工作。
# 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
我正在使用设计来验证我的 Rails 4.1.9 应用程序中的用户。
我需要在 javascript 文件中列出所有设计路线。
我试过这样做:
all_routes = Rails.application.routes.routes.map do |route|
route.path.spec.to_s.gsub('(.:format)', '')
end
这只是打印所有 rails 路线。我怎样才能只得到设计的?
我试图检查控制器,但我不知道该怎么做...
使用路由控制器确定路由是否属于设计控制器:route.defaults[:controller]
,如果您自定义或跳过自己的默认路由,这可能会变得棘手:
一旦你有了控制器,例如:"devise/sessions"
应该很容易询问它是否是 .starts_with? "devise"
或类似的东西。希望对您有所帮助!
这可能是一个可靠的方法。即使在自定义控制器的情况下它也应该工作。
# 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