TL; DR Заменить namespace
на scope
Учитывая следующую структуру папок
Rails.root
|
+-- app/
| |
| +-- controllers/
| |
| +-- jobs_controller.rb
+-- config/
|
+-- routes.rb
фрагмент ниже в routes.rb
выдает ошибку ActionController::RoutingError: uninitialized constant Api:
namespace :api do
namespace :v1 do
resources :jobs
end
end
пока работает следующее:
scope :api do
scope :v1 do
resources :jobs
end
end
Причина кратко упоминается в Маршрутизация с внешней стороны :
Область имен автоматически добавит :as
, а также
:module
и :path
префиксы.
И действительно, пространство имен - это просто оболочка вокруг области действия с кучей предопределенных опций:
# File actionpack/lib/action_dispatch/routing/mapper.rb, line 871
def namespace(path, options = {})
path = path.to_s
defaults = {
module: path,
path: options.fetch(:path, path),
as: options.fetch(:as, path),
shallow_path: options.fetch(:path, path),
shallow_prefix: options.fetch(:as, path)
}
scope(defaults.merge!(options)) { yield }
end