Rails: добавьте пространство имен к ресурсу

88
8

В настоящее время у меня это в моем routes.rb:


namespace :api
namespace :v1
namespace :me
# ...
resources :offers do
resources :state, only: %i(index)
end
end
end
end

Это дает мне этот маршрут:


GET v1/me/offers/:offer_id/state(.:format)
api/v1/me/state#index

Но маршрут, который я хотел бы иметь, следующий:


GET v1/me/offers/:offer_id/state(.:format)
api/v1/me/offers/state#index

Проще говоря, я хочу разместить мой state_controller.rb в папке offers без изменения пути доступа к нему.
Как я могу это достичь?

спросил(а) 2021-01-25T22:15:22+03:00 5 месяцев назад
1
Решение
63

Вы должны явно определить контроллер для своих ресурсов:


resources :state, controller: 'offers/state'

Это направит запросы на app/controllers/api/v1/me/offers/state_controller.rb.

ответил(а) 2021-01-25T22:15:22+03:00 5 месяцев назад
63

Я нашел лучший способ сделать это: use module

resources :offers, module: :offers do
resources :state, only: %i(index)
end

ответил(а) 2021-01-25T22:15:22+03:00 5 месяцев назад
46

namespace :api
namespace :v1
namespace :me
# ...
resources :offers do
namespace :offers, path: "" do
resources :state, only: %i(index)
end
end
end
end
end

ответил(а) 2021-01-25T22:15:22+03:00 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема