是否可以将外部路由文件包含在主要的routes.rb文件中?

时间:2014-12-02 20:37:05

标签: ruby-on-rails ruby routing

我想要将大量路由分成不同的路径文件。

我创建了一个" routes-secondary.rb"并在那里增加了一些路线。然后我尝试在应用程序的主要路径中添加这样的东西.rb:

  

要求"#{Rails.root} /config/routes-secondary.rb"

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

2 个答案:

答案 0 :(得分:4)

(我已更新此答案以利用RouteReloader进行开发工作)

您可以轻松完成此操作(即使在Rails 4中!)。

配置/ routes.rb中:

Rails.application.routes.draw do
  resources :foo
end

配置/路由/ included.rb:

Rails.application.routes.draw do
  resources :bar
end

配置/初始化/ routes.rb中

Rails.application.routes_reloader.paths.unshift *Dir[File.expand_path("../../routes/**/*.rb", __FILE__)]

这会将config / routes下的所有文件添加到应用程序路由中,并且它可能会按文件名的反向词汇顺序添加它们。如果你想以不同的顺序加载路由而不是glob,你可以按照所需的顺序将路由推送或卸载到routes_reloader.paths。

rake routes:

   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

答案 1 :(得分:0)

如果您使用的是Rails 4,则无法开箱即用,并解释here。在rails 3中,您可以按照here所述修改config.paths哈希。