rails как использовать одну модель для двух контроллеров?
Есть модель Users, которую планирую использовать и для админки, и для аккаунта пользователя. Для админки и аккаунта пользователя сгенерил два отдельных контроллера Users - один в пространстве имен Admin (для админов), один просто контроллер Users (для юзеров)
rails generate scaffold_controllers admin/users
rails generate scaffold_controllers users
В методах сгенерированного контроллера для админов, естественно, использовались обращение к модели Admin::Users, которой не существует. Я заменил в методах create,update,index и остальных модель Admin::Users на Users. Но все ссылки во views, формируемые методом link_to ведут, естественно, на урлы формируемые Users (для юзеров). Как мне можно получить во views урлы для контроллера Users (для админов)? Очевидное решение в лоб - задублировать модель User в модуле, но может есть решение с использованием одной модели? Не хочется без необходимости дублировать код.
Ответы (2 шт):
Сам разобрался: у метода link_to есть параметры, которые позволяют явно указать контроллер для формирования ссылки.
<%= link_to "Просмотр", :controller => :users, :action => :show, :id => user.id %>
Вдруг пригодится какому-то новичку в rails)
Урлы и модели - мало связанные между собой вещи. Хелпер link_to довольная умная штука, и конечно может построить нужный урл на основании переданной модели, если мы используем ресурсный роутинг.
link_to user.name, user
но вообще его интересует, в какой экшн какого контроллера должна вести ссылка. Поэтому обычно ему передают именованный роут. Можно и вашим способом воспользоваться, но для рельсов более привычен такой подход
<%= link_to "Просмотр", admin_user_path(user) %>
Все роуты вашего приложения вы можете посмотреть командой rails routes. Для админского контроллера именованные хелперы будут с префиксом admin_