Это возможно, но вы будете много (вероятно) ненужно бороться против пути Rails. Я бы подумал, что вам нужен один контроллер, поскольку, вероятно, существует довольно много общей логики (например, сохранение, удаление, создание и т. д.).
Чтобы ответить на ваш вопрос (потому что я ненавижу, когда люди оставляют рекомендации вместо ответов), вам нужно создать модуль, который расширяет маршрутизацию, что позволит вам выполнять настраиваемое сопоставление. Оттуда вы можете делать свои проверки и маршрутизировать соответствующим образом. Вот пример< /а>.
Тем не менее, лучшим путем (без каламбура) было бы иметь один контроллер с централизованным методом, который может выбирать представления.
def find_view view_name
"#{view_name}#{@user.type}"
end
Таким образом, вызов render find_view('new') попытается отобразить представление с именем "new-type1". В это представление можно поместить всю пользовательскую логику type1. То же самое для пользователя type2.
Опять же, поскольку я полагаю, что в вашем пользовательском коде будет много совпадений, вы можете захотеть передать этот метод find_view во вспомогательный класс, чтобы вы могли вызывать его из своих представлений и делать такие вещи, как рендеринг определенных частей вместо этого на основе типа пользователя . Это позволит повторно использовать больше кода, что никогда не бывает плохо.
Как только вы поймете, что у вас есть один контроллер, есть несколько простых способов, с помощью которых вы можете отправить код, специфичный для типа пользователя, на разные пути — метод представлений, описанный выше, вы можете отправить весь свой соответствующий код отдельным помощникам. которые динамически вызываются в зависимости от типа пользователя, и я уверен, что их больше (возможно, и лучше). Но все они имеют одну важную общую черту: вы будете НАМНОГО меньше бороться с Rails и у вас будет меньше дублированного кода, если вы позволите Rails добиться своего с одним маршрутом, одним контроллером.
Удачи, надеюсь поможет.
05.07.2013
User.find(:id)
может работать (не проверено). Это похоже на возможный взлом, мне нужно его еще проверить. Спасибо за помощь. 06.07.2013User.find(:id)
не работает: я пробовал, хотя это и не имеет смысла. 06.07.2013