Как Твиттер получает две разные домашние страницы в зависимости от входа в систему или нет? - Рельсы 3.1 - PullRequest
2 голосов
/ 07 сентября 2011

Если вы зашли на Twitter.com , когда вы не вошли в систему, вы увидите страницу маркетинга с полями входа и регистрации.

Однако, если вы зайдете туда, когда вывойдя в систему, вы увидите поток своей активности для своего дескриптора Twitter.

Я знаю, что один из способов сделать это в Rails - это иметь home/index для зарегистрированных пользователей и просто использовать public/index.html длямаркетинговый сайт.Но Twitter не использует public/index.html, поэтому мне интересно, как они это делают?

Это просто простой случай наличия одного корневого маршрута, но затем оператор if, который отображает две разные страницы в зависимости от того,не пользователь вошел в систему?

Или есть еще какой-нибудь более причудливый трюк с маршрутизацией, который я могу использовать для этого?

Если это просто if-statement, это кажется немного хакерским... нет?

Спасибо.

Ответы [ 3 ]

3 голосов
/ 07 сентября 2011

По умолчанию методы контроллера, которые обрабатывают определенные маршруты, отображают представление с соответствующим именем (маршрут home / index связывается с контроллером home и действие index, которое, в свою очередь, отображает представление index.html.erb в папке app / views / home).

Однако внутри метода контроллера, который обрабатывает корневой запрос, вы можете просто отрендерить другое представление, основанное на том факте, что пользователь вошел в систему или нет.

Возможно, у вас что-то естьнапример:

class HomeController
  def index
   ...
   if user_logged_in?
      render "logged_in_user"
   # else it will render the index view by default
   end
end

end

В этом случае «logged_in_user» будет другим представлением (файл шаблона или html.erb) из папки app / views / home.

Для получения дополнительной информации посмотрите здесь: Руководство по рендерингу Rails

3 голосов
/ 07 сентября 2011
1 голос
/ 07 сентября 2011

это может быть своего рода перенаправление для не авторизованных пользователей на другой контроллер, проверка сеанса пользователя может быть выполнена в before_filter

...