Я пытаюсь делать разные вещи на домашней странице своего приложения, основываясь на свойствах аутентифицированного пользователя. Например:
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 различных контроллерах (я называю их «страницами», «пользователями» и «публикациями»), но хотя можно вызывать представление другого контроллера, нельзя вызывать действие другого контроллера, что делает его немного сложным не повторяться. Есть несколько способов справиться с этим, но я не уверен, что такое Rails Way для этого, поэтому я решил спросить. Я вижу, как мои варианты:
- Используйте redirect_to в гипотетическом «контроллере перенаправления», но я хочу, чтобы страница отображалась в /, так что это не то, что мне нужно.
- Придумайте ограничения маршрутизации (не уверен, что это возможно; нужны сеансы / файлы cookie в маршрутизации, и я не уверен, что это так)
- Извлеките логику для конкретных действий из соответствующих контроллеров, вставьте их в ApplicationController и используйте их напрямую, основываясь на состоянии пользователя в гипотетическом контроллере (или просто выбросьте его на страницы).
- Значительно повторяюсь, либо в контроллере, в представлениях, либо в обоих
- Пока неизвестные варианты, я открыт для предложений.
Я склоняюсь к третьему варианту, с очевидным недостатком, заключающимся в том, что часть этих контроллеров теперь более или менее необъяснимо будет жить в ApplicationController (если, не дай бог, я сделаю что-то вроде Lovecraftian include-on-extended ). Когда я живу в двух местах, я чувствую себя грязно.
Я что-то упускаю из виду?