将路由文件拆分为多个文件

时间:2011-09-05 03:28:02

标签: ruby-on-rails ruby ruby-on-rails-3 routing

我正在使用Rails 3应用程序,我想根据子域将路由拆分为单独的文件。现在我在routes.rb文件中有这个:

Skateparks::Application.routes.draw do
  constraints(:subdomain => 'api') do
    load 'routes/api.rb'
  end
end

在我的routes / api.rb文件中,我有:

resources :skateparks

这似乎不起作用,因为如果我运行rake routes我得

undefined method `resources' for main:Object

另外,如果我尝试导航到http://0.0.0.0:3000/,我会得到:

路由错误

No route matches "/"

4 个答案:

答案 0 :(得分:6)

在Rails 3.2中,config.paths现在是一个哈希,所以@sunkencity的解决方案可以修改为:

# config/application.rb
config.paths["config/routes"] << File.join(Rails.root, "config/routes/fooroutes.rb")

答案 1 :(得分:4)

Sunkencity的答案似乎与以下链接相同,但为了完整起见:https://rails-bestpractices.com/posts/2011/05/04/split-route-namespaces-into-different-files/

请注意,稍后定义的路由将覆盖先前定义的路由。但是,如果您使用类似

的内容
    config.paths.config.routes.concat(
        Dir[Rails.root.join('config/routes/*.rb')])

您不知道文件的读取顺序。所以使用

    config.paths.config.routes.concat(
        Dir[Rails.root.join('config/routes/*.rb')].sort)

相反,所以你至少知道它们将按字母顺序排列。

答案 2 :(得分:0)

将路径文件添加到应用程序路径加载路径:

# config/application.rb
config.paths.config.routes << File.join(Rails.root, "config/routes/fooroutes.rb")

将您的其他路径文件包装在这样的块中。

#config/routes/fooroutes.rb
Rails.application.routes.draw do |map|
  match 'FOO' => 'foo/bar'
end

在rails 3.0中为我工作

答案 3 :(得分:0)

我们在我们的应用中使用了这个:

    config.paths['config/routes'] = Dir["config/routes/*.rb"]

如果您尝试正常访问config.paths['config/routes'],它会返回config/routes.rb的相对路径,因此通过执行上述操作,您可以为路径文件夹中的所有文件提供相对路径并删除对config/routes.rb

的引用