Я пытаюсь делать разные вещи на домашней странице моего приложения на основе свойств текущего аутентифицированного пользователя. Например:
location, user, state, -> destination
/, no user -> a home page
/, user authenticated, state: unverified -> user profile page
/, user authenticated, state: verified -> a content listing
Это выглядит так, что я пытаюсь «направить» на основе текущего состояния пользователя (представленного конечным автоматом). Эти 3 действия уже существуют в 3 разных контроллерах (я называю их «страницы», «пользователи» и «сообщения»), но хотя можно вызвать представление другого контроллера, нельзя вызвать действие другого контроллера, что немного усложняет задачу. чтобы не повторяться. Есть несколько способов справиться с этим, но я не уверен, что для этого предназначен The Rails Way, поэтому я решил спросить. Я вижу свои варианты:
- Используйте redirect_to в гипотетическом «контроллере перенаправления», но я хочу, чтобы страница отображалась под /, так что это не то, что я хочу.
- Пофантазируйте с ограничением маршрутизации (не уверен, что это возможно; нужны сеансы/файлы cookie, доступные в маршрутизации, и я не уверен, что это так)
- Вытащите логику для конкретных действий из соответствующих контроллеров, перенесите их в ApplicationController и используйте их напрямую, основываясь на состоянии пользователя в гипотетическом контроллере (или просто разместив его на страницах).
- Многозначительно повторяюсь, либо в контроллере, либо в представлениях, либо в обоих.
- Пока неизвестные варианты, я открыт для предложений.
Я склоняюсь к третьему варианту с очевидным недостатком, заключающимся в том, что какая-то часть этих контроллеров теперь более или менее необъяснимым образом будет жить в ApplicationController (если только, помоги мне Бог, я не использую какое-то Лавкрафтовское включение при расширении). Наличие этого кода в двух местах кажется мне грязным.
Я упускаю что-то очевидное?