Принудительный путь current_user - PullRequest
0 голосов
/ 03 июня 2010

В настоящее время пользователи могут получить доступ к своему «профилю» по многим путям.

  • локальный: 3000 / пользователей / current_user
  • локальный: 3000 / пользователей / ток
  • локальный: 3000 / пользователей / ID #

Как я могу сделать так, чтобы они могли попасть в свой "профиль" только через localhost: 3000 / users / current_user

Ответы [ 2 ]

1 голос
/ 03 июня 2010

Одно предложение по вопросу «что» в вашем вопросе: вместо идеального URL-адреса будет localhost: 3000 / users / current_user Я предлагаю localhost: 3000 / user или что-то еще более информативное, например localhost: 3000 / профиль или localhost: 3000 / учетная запись .

Не могли бы вы включить записи в вашем route.rb? Даже если Authlogic и т. Д. Добавляют маршруты к вашему приложению, они должны делать это в rout.rb. Если у вас есть запись:

map.resource :users

тогда вот откуда идет маршрут / users / 123. Я согласен с Matchu, что даже если вы не используете / users / 123, вы должны сохранить его и направить к нему другие запросы.

Дополнительная идея Если вы не хотите заниматься (довольно сложным и не очень) делом сохранения ошибок проверки модели через перенаправления, попробуйте другой способ. Отсюда я предполагаю, что у вас уже есть map.resource: users, так что у вас есть 7 стандартных действий на вашем UsersController (индексировать, создавать, показывать, редактировать, обновлять, уничтожать).

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

map.profile 'profile', :controller => 'users', :action => 'show'
map.edit_profile 'profile/edit', :controller => 'users', :action => 'edit', :conditions => { :method => :get }
map.update_profile 'profile/edit', :controller => 'users', :action => 'update', :conditions => { :method => :put }

Вам нужно будет немного обновить тэг form_for:

<% form_for @user, :url => update_profile_path do |f| %> ...

Теперь, при условии, что вы начинаете с / profile и нажимаете ссылку для редактирования, которая ведет к / profile / edit (должна отображаться форма), если вы заполняете форму так, что она не проходит проверку, вы должны снова вернуться на / profile / edit с правильными ошибками в выводе f.error_messages.

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

def update
   @user = current_user || User.find(params[:id])
   if @user.update_attributes(params[:user])
     flash[:notice] = "Successfully updated user."
     redirect_to @user
   else
     render :action => 'edit'
   end
end

Визуализация (а не перенаправление) сохраняет состояние модели @user (включая ошибки) и просто визуализирует шаблон редактирования снова. Поскольку вы указали его на update_profile_path, URL, который просматривает пользователь, по-прежнему /profile/edit.

0 голосов
/ 03 июня 2010

Хмм, сначала удалите маршрут /users/current, который вы должны иметь где-то в вашем routes.rb. (Хотя я предпочитаю от /users/current до /users/current_users, поскольку последнее довольно избыточно.)

Что касается /users/123, то в вашем контроллере вы можете проверить, совпадает ли текущий идентификатор пользователя с 123 или каким-либо другим, и, если это так, перенаправить.

Но я действительно предпочитаю противоположный эффект. Нажатие /users/current на /users/123 имеет больше смысла в моем мозгу, так как оно поддерживает согласованность маршрутов для всех пользователей, в то же время позволяя вам кэшировать ссылки на /users/current.

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