Rails 3 Лучший способ иметь две разные домашние страницы в зависимости от статуса входа - PullRequest
4 голосов
/ 09 августа 2011

Сначала я попытался получить доступ к переменной сеанса в файле rout.rb и поместил простой оператор if. Если пользователь вошел в систему, перейдите к записи # index, иначе перейдите на посадку # index. Тем не менее, route.rb не имеет доступа к переменным сеанса. У меня установлена ​​сессия [: user_id], и я могу использовать ее для проверки статуса входа. Лучше ли установить страницу выхода из системы как домашнюю в rout.rb, а затем перенаправить на этот контроллер, если пользователь вошел в систему, или есть лучший способ, о котором я не знаю?

Вот что я сделал в контроллере для домашней страницы пользователя, вышедшего из системы.

     def index
    if User.find_by_id(session[:user_id])
      redirect_to entry_url
    end
  end

Работает нормально, но не уверен, есть ли какие-либо проблемы с этим или лучшим способом. Любые мысли будут оценены.

Ответы [ 2 ]

7 голосов
/ 29 августа 2011

Маршруты действительно имеют доступ к переменным сеанса. Вы можете установить ограничение для маршрутизации зарегистрированных пользователей к другому корню, как показано ниже:

# Logged in
constraints lambda { |req| !req.session[:user_id].blank? } do
    root :to => "entry#index", :as => "dashboard"
end

# Not logged in
root :to => "landing#index"

Важно отметить две вещи: во-первых, здесь важен порядок; во-вторых, ограничение может быть реорганизовано в однострочный маршрут, если только вы не планируете использовать ограничение далее (что я всегда делаю).

1 голос
/ 29 августа 2011

Определенно, он должен обрабатываться вашим контроллером, а не вашими маршрутами.

def index
  @user = User.find_by_id(session[:user_id])
  if @user
    redirect_to entry_url
  else
    redirect_to landing_url
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...