Как получить доступ к представлению текущего пользователя в Rails? - PullRequest
7 голосов
/ 20 марта 2012

Как получить root права на представление представления текущего пользователя в приложении Rails?

Я хочу сделать что-то вроде

authenticated :user do
    root :to => "users#show"
end

, но как мне передать идентификатор текущего пользователя в это?

Спасибо

Ответы [ 4 ]

8 голосов
/ 20 марта 2012

Я сделал before_filter, где я проверяю, если request.path == root_path, и если так, я перенаправляю на путь, который должен быть корнем для конкретного пользователя.Корневой_путь, установленный в routes.rb, не является корнем, специфичным для пользователя, для любого пользователя, поэтому нет бесконечного перенаправления.Просто сделайте flash.keep, чтобы ваши флеш-сообщения пережили перенаправление.

РЕДАКТИРОВАТЬ: Чтение вопросов и ответов и комментариев, пытаясь понять, что у вас уже есть, и что вам все еще нужно.Удалось ли настроить маршрутизацию, чтобы действие show отображалось без :id в URL?Если это так, возможно, вам нужно что-то подобное в вашем контроллере show action:

if params[:id].nil? # if there is no user id in params, show current one
    @user = current_user
else # if there is the user id in params just use it, 
     # maybe get 'authorization failed'
    @user = User.find params[:id]
end
6 голосов
/ 17 февраля 2015

У меня сработало следующее.

В маршрутах.rb:

root to: 'users#current_user_home'

В users_controller.rb:

def current_user_home
  redirect_to current_user
end
1 голос
/ 20 марта 2012

Всегда ли это «текущий» пользователь или любой произвольный пользователь?

Если это текущий пользователь, просто направьте их всех на одну и ту же страницу (без указания идентификатора) и в действии контроллера получите текущего пользователя (из сеанса и т. Д.) И передайте его в представление.

0 голосов
/ 20 марта 2012

Идентификатор текущего пользователя не должен быть в URL, который должен храниться в сеансе.Поэтому вам не нужно передавать его по маршруту.

Редактировать: После прочтения вашего комментария, я думаю, вы могли бы определить другое действие, например profile для показа.текущее представление пользователя.

Или при вашем действии users/show добавьте код, например:

if current_user.is_admin?
    @user = User.find params[:id]
else
    @user = current_user
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...