我正在使用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 "/"
答案 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