Разделение файлов маршрутов в несколько файлов

Я работаю с приложением Rails 3, и я хочу разделить маршруты на отдельные файлы в зависимости от поддомена. Прямо сейчас у меня это в файле routes.rb:

Skateparks::Application.routes.draw do
  constraints(:subdomain => 'api') do
    load 'routes/api.rb'
  end
end

И В моих файлах route/api.rb у меня есть:

resources :skateparks

Это не работает, хотя, если я запустил rake routes, я получаю

undefined method `resources' for main:Object

Кроме того, если я попытаюсь перейти к http://0.0.0.0:3000/, я получаю:

Ошибка маршрутизации

No route matches "/"

Ответы

Ответ 1

В Rails 3.2 config.paths теперь хеш, поэтому решение @sunkencity может быть изменено на:

# config/application.rb
config.paths["config/routes"] << File.join(Rails.root, "config/routes/fooroutes.rb")

Ответ 2

Ответ Sunkencity кажется идентичным следующей ссылке, но для полноты: http://rails-bestpractices.com/posts/73-split-route-namespaces-into-different-files

Обратите внимание, что маршруты, определенные позже, переопределяют маршруты, определенные ранее. Однако, если вы используете что-то вроде

    config.paths.config.routes.concat(
        Dir[Rails.root.join('config/routes/*.rb')])

вы не знаете, в каком порядке будут прочитаны файлы. Поэтому используйте

    config.paths.config.routes.concat(
        Dir[Rails.root.join('config/routes/*.rb')].sort)

поэтому вы, по крайней мере, знаете, что они будут в алфавитном порядке.

Ответ 3

Добавьте файл маршрута в путь загрузки маршрута приложения:

# config/application.rb
config.paths.config.routes << File.join(Rails.root, "config/routes/fooroutes.rb")

Обмотайте другой файл маршрута в таком блоке.

#config/routes/fooroutes.rb
Rails.application.routes.draw do |map|
  match 'FOO' => 'foo/bar'
end

Работает для меня в rails 3.0

Ответ 4

Мы использовали это в нашем приложении:

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

Если вы пытаетесь получить доступ к config.paths['config/routes'] обычно, он возвращает относительный путь к config/routes.rb, поэтому, выполняя вышеуказанное, вы предоставляете ему относительные пути ко всем файлам в папке маршрутов и удаляя ссылку на config/routes.rb