Ответ 1
В Rails 3.2 config.paths теперь хеш, поэтому решение @sunkencity может быть изменено на:
# config/application.rb
config.paths["config/routes"] << File.join(Rails.root, "config/routes/fooroutes.rb")
Я работаю с приложением 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 "/"
В Rails 3.2 config.paths теперь хеш, поэтому решение @sunkencity может быть изменено на:
# config/application.rb
config.paths["config/routes"] << File.join(Rails.root, "config/routes/fooroutes.rb")
Ответ 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)
поэтому вы, по крайней мере, знаете, что они будут в алфавитном порядке.
Добавьте файл маршрута в путь загрузки маршрута приложения:
# 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
Мы использовали это в нашем приложении:
config.paths['config/routes'] = Dir["config/routes/*.rb"]
Если вы пытаетесь получить доступ к config.paths['config/routes']
обычно, он возвращает относительный путь к config/routes.rb
, поэтому, выполняя вышеуказанное, вы предоставляете ему относительные пути ко всем файлам в папке маршрутов и удаляя ссылку на config/routes.rb