Ruby on rails 是否可以将外部路由文件包括到main routes.rb文件中?

Ruby on rails 是否可以将外部路由文件包括到main routes.rb文件中?,ruby-on-rails,ruby,routing,Ruby On Rails,Ruby,Routing,我有大量的路由,我想分为不同的路由文件 我创建了一个“routes secondary.rb”,并在那里添加了一些路由。然后我尝试在应用程序的主路线中添加类似的内容。rb: Rails.application.routes.draw do resources :foo end 需要“#{Rails.root}/config/routes secondary.rb” 但是,这不起作用,因为Rails无法识别routes-secondary.rb中的路由。有没有正确的方法可以做到这一点?如果您

我有大量的路由,我想分为不同的路由文件

我创建了一个“routes secondary.rb”,并在那里添加了一些路由。然后我尝试在应用程序的主路线中添加类似的内容。rb:

Rails.application.routes.draw do
  resources :foo
end
需要“#{Rails.root}/config/routes secondary.rb”


但是,这不起作用,因为Rails无法识别routes-secondary.rb中的路由。有没有正确的方法可以做到这一点?

如果您使用的是Rails 4,那么您不能在开箱即用的情况下做到这一点,并对此进行了说明。在rails 3中,您可以按照说明修改config.paths散列。

(我更新了这个答案,以利用RouteReloader进行开发工作)

您可以很容易地实现这一点(即使在Rails4中也是如此!)

config/routes.rb:

Rails.application.routes.draw do
  resources :foo
end
config/routes/included.rb:

Rails.application.routes.draw do
  resources :bar
end
config/initializers/routes.rb

Rails.application.routes_reloader.paths.unshift *Dir[File.expand_path("../../routes/**/*.rb", __FILE__)]
这将把config/routes下的所有文件添加到应用程序路由中,并且可能会按文件名的相反词法顺序添加它们。如果您想以不同的顺序加载路由,而不是以glob加载路由,则可以按所需的顺序将路由推送或取消移动到routes_reloader.path上

耙道:

   Prefix Verb   URI Pattern             Controller#Action
foo_index GET    /foo(.:format)          foo#index
          POST   /foo(.:format)          foo#create
  new_foo GET    /foo/new(.:format)      foo#new
 edit_foo GET    /foo/:id/edit(.:format) foo#edit
      foo GET    /foo/:id(.:format)      foo#show
          PATCH  /foo/:id(.:format)      foo#update
          PUT    /foo/:id(.:format)      foo#update
          DELETE /foo/:id(.:format)      foo#destroy
bar_index GET    /bar(.:format)          bar#index
          POST   /bar(.:format)          bar#create
  new_bar GET    /bar/new(.:format)      bar#new
 edit_bar GET    /bar/:id/edit(.:format) bar#edit
      bar GET    /bar/:id(.:format)      bar#show
          PATCH  /bar/:id(.:format)      bar#update
          PUT    /bar/:id(.:format)      bar#update
          DELETE /bar/:id(.:format)      bar#destroy

啊,我明白了。谢谢你,迈克。不幸的是,我正在使用Rails 4。这看起来很棒。谢谢你,克里斯。外部线路按预期运行。我遇到的一个问题是,如果我以任何方式修改main routes.rb文件(例如添加注释甚至空格),外部文件中的路由将停止工作,这迫使我重新启动应用程序。你知道是什么导致了这个问题吗?我会怀疑Rails 4中的路由重新加载机制。自从使用Rails 4以来,我的路线基本上是静态的,所以我没有遇到过这种情况。给我一些,看看我是否能了解它在做什么。@sjsc查看我的编辑;这会将额外的路由文件修补到路由重新加载程序中,从而使其在开发中按预期工作。这与引擎将路线添加到应用程序时使用的机制相同。谢谢Chris。我尝试添加上面的unshift行,但出现了以下错误:“RuntimeError:can not modify freezed Array”您是否在初始值设定项中修改这些路由?我的测试用例肯定是在使用Stock4.1.8应用程序。不过,它们有可能在初始化后被冻结。