@Weziw

Как организовать неймспейсы в Rails?

Привет! Как организовать работу с неймспейсами в рельсах? Самый простой пример - у меня есть страница для гостей. Когда гость переходит в группу пользователей, то с / его перемещает в /dashboard
Там у меня есть некоторые контроллеры. Например, контроллер постов. Также у меня есть модель Post (которую по причине наличия админки в неймспейсе /admin не стоит выносить в Dashboard::Post).
В итоге мы получаем такой роутинг:
root 'guest#index'

namespace :dashboard do
  resources :posts
end
namespace :admin do
  resources :users, :posts
end

И вот хотелось бы получать пути из моделей правильно. Например, если мы в контроллере, что в неймспейсе /dashboard, то form_for @post должно ссылаться на /dashboard/posts/new, а если мы в неймспейсе /admin, то на /admin/posts/new

Как можно добиться такого поведения? Или я строю неверную архитектуру? Сообщество, выручайте!
  • Вопрос задан
  • 2564 просмотра
Пригласить эксперта
Ответы на вопрос 3
@caution
смотрите ка, что я НАШЕЛ написав в гугле: "namespace rails"
rusrails.ru/rails-routing#prostranstvo-imen-kontro...

удивительно, какие возможности дает клавиатура
Ответ написан
Jeiwan
@Jeiwan
Так если у вас разные неймспейсы, то и представления будут браться из разных папок: для дэшборда — из views/dashboard, а для админа — из views/admin. Так что проблем быть не должно.
А если вы смешиваете представления, и в разных неймспейсах грузите одни и те же представления, то тут стоит задуматься, а нужно ли так делать. В какой-то момент для одного из неймспейса понадобится сделать свои представления.
Ответ написан
@vsuhachev
Один из вариантов который я видел - cоздать классы Dashboard::Post и Admin::Post отнаследованные от Post. Сам такое не использовал, возможно есть какие-то слабости у этого решения, раз оно не сильно распространено

Я решал подобную проблему с помощью явного указания нэймспэйса form_for [:admin, @post]
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы