Как вы обрабатываете текущего пользователя и список пользователей? - PullRequest
2 голосов
/ 03 апреля 2011

У меня есть ситуация (довольно стандартная для всех, я думаю), где я должен сделать две вещи:

  1. Если пользователь запрашивает / путь пользователя, я долженпредставить свою личную информацию.

  2. Если пользователь запрашивает путь / user /: id, я должен предоставить информацию об этом конкретном пользователе или информацию о текущем пользователе, если: id совпадаетИдентификатор current_user.

Определенно есть много способов сделать это, но каков наилучший подход?Должен ли я иметь 2 разных маршрута, таких как / show /: id и / show_current, обработанных различными действиями, или просто иметь / show /: id и выполнять обработку в этом действии?

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

Ответы [ 2 ]

2 голосов
/ 03 апреля 2011

Если текущий пользователь, скажем, 42, то /user/42 и /user будут отображать ту же информацию, но /user/23 будет отображать урезанную общедоступную версию данных 23.Таким образом, обработчик для /user/:id должен будет знать, что особый случай :id является текущим пользователем;обработчик для /user также должен будет знать об этом особом случае, поскольку это все, что он делает.

Если вы используете два маршрута, то вы либо дублируете код, оборачивая реальный код в дополнительный слой,или какая-то другая занятая работа.Я просто отправил бы их обоих в один и тот же метод контроллера, и это могло бы начаться с чего-то вроде этого:

user = params['id'] ? User.find(params['id']) : current_user

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

if(user == current_user)
    # show the full blob of information
else
    # show just the limited public information
end

Конечно, вы можете нарезать его на несколько маленьких методов, таких как show_current_user_info и show_other_user_info, внутри контроллера.Обработчик для /user может быть просто вызовом show_current_user_info;обработчик /user/:id может вызывать show_current_user_info или show_other_user_info в зависимости от значения :id.Этот подход для меня пахнет бессмысленно.

1 голос
/ 03 апреля 2011

В RESTful-маршрутизации вы описали users_path и user_path(some_id).Они отображаются на User#index и User#show.Метод index обычно представляет собой список пользователей, но если вы хотите, чтобы index показал личную информацию current_user, вы, безусловно, можете это сделать.Если вам также нужен метод списка, просто добавьте его в свой контроллер и создайте маршрут к нему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...