2014-12-02 2 views
3

У меня есть большое количество маршрутов, которые я хотел бы разделить на разные файлы маршрутов.Можно ли включать файлы внешних маршрутов в основной файл route.rb?

Я создал «routes-secondary.rb» и добавил туда некоторые маршруты. Затем я попытался добавить что-то вроде этого в главном routes.rb о приложении:

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

Это не работает, однако, поскольку Rails не распознает маршруты в маршруты-secondary.rb. Есть ли способ сделать это правильно?

ответ

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, вы можете просто нажать или переместить маршруты на route_reloader.paths в желаемом порядке.

реки маршруты:

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 
+0

Это выглядит великолепно. Спасибо, Крис. Внешние маршруты работают так, как ожидалось. Одна из проблем, с которыми я столкнулась, заключается в том, что если я каким-либо образом модифицирую основной файл route.rb (например, добавляя комментарий или даже пробел), маршруты во внешнем файле перестают работать, что заставляет меня перезапустить приложение. Вы знаете, что вызывает эту проблему? – sjsc

+1

Я бы с подозрением относился к механизму перезагрузки маршрутов в Rails 4. Я не сталкивался с этим, так как мои маршруты были в основном статичными с работы с Rails 4. Дайте мне немного, чтобы посмотреть, могу ли я понять, что он делает. –

+0

@ sjsc См. Мое редактирование; который исправляет дополнительные файлы маршрута в перегружателе маршрутов, что заставляет все работать должным образом в разработке. Это тот же механизм, что и двигатели для добавления своих маршрутов в приложение. –

0

Если вы используете Rails 4, вы не можете сделать это из коробки, и это объясняется here. В рельсах 3 вы можете изменить свой хэш конфигурации config.paths, как описано here.

+0

Ааа я вижу. Спасибо, Майк. Я использую Rails 4, к сожалению, – sjsc

Смежные вопросы