2013-09-17 2 views
14

Я хотел бы разбить маршруты в приложении rails 4. Для рельсов 3 вопрос был дан ответ несколько раз, как:рельсы 4: split routes.rb в несколько файлов меньшего размера

Что бы правильный способ сделать это в рельсах 4 + как получить контроль над порядок загрузки маршрутов?

Похожие с рельсов 3 вопроса:

application.rb

config.paths['config/routes'] = Dir["config/routes/*.rb"] 

завершается с:

/Users/jordan/.rvm/gems/ruby- [email protected]/gems/railties-4.0.0/lib/rails/application/routes_reloader.rb: 10: in `rescue in execute_if_updated ': Рельсы :: Применение :: RoutesReloader # execute_if_updated делегированы updater.execute_if_updated, но обновления равна нулю:

@route_sets = [#]> (RuntimeError)

ответ

4

Это был удален из Rails 4 в июне 2012 года. 5e7d6bba возвращает предыдущую фиксацию, удаляя поддержку для загрузки нескольких файлов внешних маршрутов в составе config.rb.

Для дальнейшего ознакомления, ознакомьтесь с комментариями к этому commit.

8

Немного опоздал на вечеринку, но вы можете сделать это в Rails 4 обезьяной, исправляющей карту в верхней части вашего файла route.rb. то есть:

# config/routes.rb 
class ActionDispatch::Routing::Mapper 
    def draw(routes_name) 
    instance_eval(File.read(Rails.root.join("config/routes/#{routes_name}.rb"))) 
    end 
end 

А затем с помощью метода draw в routes.rb с:

Rails.application.routes.draw do 
    draw :api 
end 

это будет ожидать файл конфигурации/маршрутов/api.rb.

Немного более полное объяснение с examples of splitting the routes file здесь.

+3

Вы рекомендовали патч обезьяны без предупреждения о плохих вещах, которые могут быть связаны с проектом обезьяны. – yagooar

+2

@yagooar, я использую это в своем проекте, что с ним не так? Быстрый поиск в Google не предоставил никаких «плохих» вещей – AndreiMotinga

+0

Я предполагаю, что это должно перезагрузить маршруты перезагрузки – cutalion

17

я управлять этим следующим образом:

# config/application.rb 
config.autoload_paths << Rails.root.join('config/routes') 

# config/routes.rb 
Rails.application.routes.draw do 
    root to: 'home#index' 

    extend ApiRoutes 
end 

# config/routes/api_routes.rb 
module ApiRoutes 
    def self.extended(router) 
    router.instance_exec do 
     namespace :api do 
     resources :tasks, only: [:index, :show] 
     end 
    end 
    end 
end 

Здесь я добавил config/routes каталог для модулей автозагрузки, определенных в нем. Это обеспечит перезагрузку маршрутов при изменении этих файлов.

Используйте extend, чтобы включить эти модули в основной файл (они будут автоматически загружены, их не нужно будет требовать).

Используйте instance_exec внутри self.extended, чтобы нарисовать маршруты в контексте маршрутизатора.

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