Ruby on rails 是否可以将外部路由文件包括到main routes.rb文件中?
我有大量的路由,我想分为不同的路由文件 我创建了一个“routes secondary.rb”,并在那里添加了一些路由。然后我尝试在应用程序的主路线中添加类似的内容。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中的路由。有没有正确的方法可以做到这一点?如果您
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应用程序。不过,它们有可能在初始化后被冻结。