Rails 'маршрутизация' на основе свойств модели - PullRequest
1 голос
/ 22 сентября 2011

Я пытаюсь делать разные вещи на домашней странице своего приложения, основываясь на свойствах аутентифицированного пользователя. Например:

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 ). Когда я живу в двух местах, я чувствую себя грязно.

Я что-то упускаю из виду?

1 Ответ

1 голос
/ 22 сентября 2011

Будет ли работать одно действие, которое использует помощника для выбора правильной части на основе текущего состояния пользователя?

Кроме того, обратите внимание на использование ActiveSupport :: Concern вместо получения всех включенных на расширение Lovecraftian. http://api.rubyonrails.org/classes/ActiveSupport/Concern.html

...