Подтвердить что ты не робот

Контроллер группировки в подкаталогах для вложенных ресурсов

Я хотел бы организовать мои контроллеры в подкаталогах. Вот пример:

routes.rb:

resources :locations do
  resources :users
end

Я хотел бы поместить мой контроллер в соответствующий подкаталог:

app/controllers/locations/users_controller.rb

и url будет (стандартным):

/locations/1/users
/locations/1/users/new
/locations/1/users/10/edit
...

Если бы у меня было пространство имен на моих маршрутах, я мог бы изменить my users_controller.rb на

class Locations::UsersController < LocationsController
end

но он не работает с вложенными ресурсами, вместо этого я получаю следующую ошибку:

 Routing Error
 uninitialized constant UsersController

Update

Он работает, если я добавляю:

resources :locations do
  resources :users
end
match 'locations/:location_id/users' => "locations/users#index"

но мне нужно будет добавить маршрут для каждого действия и вложенного ресурса...

4b9b3361

Ответ 1

Если вы хотите использовать только один маршрут:

match 'locations/:location_id/users' => "locations/users#index"

Это должно появиться перед любыми другими ресурсами/совпадениями, которые могут противоречить этому совпадению. По умолчанию маршруты Rails расположены сверху вниз.

# should be before locations resource
resources :locations do
  resources :users
end

В качестве альтернативы, если вы хотите привязать весь свой вложенный ресурс users к locations/users, вы можете назначить контроллер ресурсу.

resources :locations do
  resources :users, :controller => "locations/users"
end

Ответ 2

Можно использовать модули для вложенных маршрутов с вложенными контроллерами:

resources :locations do
  scope module: :locations do
    resources :users
  end
end

$рейк-маршруты

...
location_users GET /locations/:location_id/users locations/users#index
...

Ответ 3

Как говорит Квон, этот порядок имеет значение. Но вы все равно можете использовать пространство имен.

.../конфиг/routes.rb

namespace :locations do
    resources :users
end
resources :locations

.../app/controller/locations_controller.rb:

class LocationController < ApplicationController

.../app/controller/locations/users_controller.rb:

class Locations::UsersController < LocationsController