从Rails路由创建ruby哈希对象?

时间:2015-05-13 04:45:39

标签: ruby-on-rails ruby ruby-on-rails-4

使用rails 4.2.1

我想将rails声明的路由从config/routes.rb存储到我可以访问或呈现的ruby哈希值。

哈希的格式应为

{
  name: 'path',
  # e.g.
  login: '/login',
  home: '/'
}

我如何在rails中执行此操作?

注意:我认为您可以通过Rails.application.routes获取路线,也可以使用Rails.application.routes.routes.named_routes.keys中的名称,但下一步是什么?

3 个答案:

答案 0 :(得分:1)

如果你真的必须这样做,你可以:

ri = ActionDispatch::Routing::RoutesInspector.new([])
result = ri.send :collect_routes, Rails.application.routes.routes

结果将是一个哈希数组,如下所示:

{:name=>"product", :verb=>"GET", :path=>"/products/:id(.:format)", :reqs=>"products#show", :regexp=>"^\\/products\\/([^\\/.?]+)(?:\\.([^\\/.?]+))?$"}

答案 1 :(得分:1)

这将为您提供一个哈希,其中键是路径名称,值是路径:

routes = Hash[Rails.application.routes.routes.map { |r| [r.name, r.path.spec.to_s] }]

routes现在看起来像:

{
  "entities" => "/entities(.:format)",
  "new_entity" => "/entities/new(.:format)",
  "edit_entity" => "/entities/:id/edit(.:format)",
  "entity" => "/entities/:id(.:format)"
}

答案 2 :(得分:1)

您可能希望使用生成javascript文件的JS-Routes gem,该文件将所有名为routes的Rails定义为javascript助手。

设置(只需将其添加到资产管道):

# add to your application.js
/*
= require js-routes
*/

使用你的javascript代码:

Routes.users_path()                   // => "/users"
Routes.user_path(1)                   // => "/users/1"
Routes.user_path(1, {format: 'json'}) // => "/users/1.json"

在此处查找文档:https://github.com/railsware/js-routes#usage