有没有办法获得所有rails资源的列表?

时间:2015-02-16 12:35:16

标签: ruby-on-rails

我希望获得项目中的所有资源以记录对它们的一些操作。有没有办法做到这一点?

更具体地说,我想得到所有资源和相关模型的哈希,所以我不认为rake输出(并解析它)不是一个合适的解决方案。

2 个答案:

答案 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)

5.1 Listing Existing Routes

  

要获取应用中可用路线的完整列表,请在服务器在开发环境中运行时,在浏览器中访问http://localhost:3000/rails/info/routes。您还可以在终端中执行rake routes命令以生成相同的输出。

     

您可以将列表限制为映射到设置CONTROLLER 环境变量的特定控制器的路由:

CONTROLLER=users bin/rake routes