我希望获得项目中的所有资源以记录对它们的一些操作。有没有办法做到这一点?
更具体地说,我想得到所有资源和相关模型的哈希,所以我不认为rake输出(并解析它)不是一个合适的解决方案。
答案 0 :(得分:1)
更新:如果您认为我疯了
正如我在评论中提到的那样:如果你看一下
mapper
您会看到关键字资源会扩展为多个get
s,post
等等。所以我想说你最好的机会就是去 通过路径并记住路径的第一部分是 命名空间或资源名称。然而,真的会变得更好 对于嵌套资源很复杂。
所以我提出了一个疯狂的想法:解析routes.rb
文件。您可以逐行阅读routes.rb
并使用resource(s*) :(\w*)
这样的正则表达式来优化资源:
regex = %r(resource(s*) :(\w*))
resources = []
routes = File.open(File.join(Rails.root, "/config/routes.rb")).read
routes.each_line do |l|
matches = regex.match l
if matches && matches[1]
resources << matches[1]
end
end
然而,这是一个非常不灵活的解决方案。
如果您想在浏览器中使用
关注guides:
要获取应用程序中可用路径的完整列表, 在浏览器中访问http://localhost:3000/rails/info/routes 您的服务器正在开发环境中运行。
如果您想在终端中显示
bundle exec rake routes
如果你想过滤掉它:
bundle exec rake routes | grep 'my_namespace'
其中name_space
是您喜欢的任何关键字!
如果您想以编程方式执行此操作:
Rails.application.routes.routes
例如,这是我用来查找具有给定前缀的路线的方法:
def routes_starting_with(prefix)
result = []
Rails.application.routes.routes.each do |route|
path = route.path.spec.to_s
result << route if path.starts_with?("/#{prefix}")
end
result
end
end
答案 1 :(得分:1)
要获取应用中可用路线的完整列表,请在服务器在开发环境中运行时,在浏览器中访问http://localhost:3000/rails/info/routes。您还可以在终端中执行
rake routes
命令以生成相同的输出。您可以将列表限制为映射到设置
CONTROLLER
环境变量的特定控制器的路由:
CONTROLLER=users bin/rake routes