使用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
中的名称,但下一步是什么?
答案 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"