Rails 获取路线列表作为带有参数的路径

Jon*_*han 0 routes ruby-on-rails ruby-on-rails-5

我想要一个 Rails 应用程序支持的 URL 列表,但我不想提前提供任何参数。

例如,我想列出user_registration_pathas的路径/%{locale}/users/sign_up

我可以获得一个命名路由列表,如下所示(在 Rails 控制台中测试):

Rails.application.routes.named_routes.helper_names
Run Code Online (Sandbox Code Playgroud)

输出示例:

["rails_info_properties_path", "rails_info_routes_path", "rails_info_path", "rails_mailers_path", "rails_service_blob_path", "rails_blob_path", "rails_blob_representation_path", "rails_representation_path", "rails_disk_service_path"...]
Run Code Online (Sandbox Code Playgroud)

Rails 有什么办法可以实现这一点吗?

nua*_*aky 6

你可以尝试使用这个命令:

Rails.application.routes.routes
  .map { |r| { path: r.path.spec.to_s } }
Run Code Online (Sandbox Code Playgroud)

它会给你这个输出:

{:path=>"/admin/users/:id/edit(.:format)"},
{:path=>"/admin/users/:id(.:format)"},
{:path=>"/admin/users/:id(.:format)"},
{:path=>"/admin/users/:id(.:format)"},
Run Code Online (Sandbox Code Playgroud)

或者作为数组(您可以改进它,这只是一个简单的示例):

Rails.application.routes.routes
  .flat_map { |r| r.path.spec.to_s }
  .uniq
  .map { |path| path.gsub('(.:format)', '') }
Run Code Online (Sandbox Code Playgroud)
[
 "/admin/users",
 "/admin/users/new",
 "/admin/users/:id/edit",
 "/admin/users/:id"
]
Run Code Online (Sandbox Code Playgroud)