Маршрут направляющих, зависящий от текущего пользователя

Я хотел бы создать маршрут направляющих для того, чтобы изменить профиль пользователя.

Вместо того, чтобы иметь необходимость использовать/users/:id/edit, я хотел бы иметь URL как/edit_profile

Действительно ли возможно создать динамический маршрут, который поворачивает/edit_profile в/users/{идентификатор пользователя} / редактирование, или я должен сделать вещь в контроллере или?

5
задан Lowgain 4 May 2010 в 00:34
поделиться

2 ответа

Возможно, вы захотите создать отдельный контроллер для этой задачи, но вы также можете продолжить использовать users_controller и просто проверить, установлен ли params [: id] :

def edit
  if params[:id]
    @user = User.find(params[:id])
  else
    @user = current_user
  end
end

Но вы должны отметить, что / users обычно направляется к действию index , а не show , если у вас все еще есть маршрут map.resources: users . Но вы можете настроить для этого другой маршрут:

map.resources :users
map.resource :profile, :controller => "users"

Таким образом, / users выведет список всех пользователей, / users /: id покажет любого пользователя, а ] / profile покажет покажет страницу пользователей, вошедших в систему в данный момент. Чтобы отредактировать свой собственный профиль, вы должны позвонить «/ profile / edit».

4
ответ дан 14 December 2019 в 08:45
поделиться

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

Для контроллера, предполагая, что вы сохраняете идентификатор пользователя в сеансе, вы можете просто сделать так, чтобы ваш метод редактирования выполнял что-то вроде:

def edit
  @user = User.find(session[:user_id])
end

Затем создайте маршрут, который выглядит примерно так:

map.edit_profile "edit_profile", :controller => "users", :action => "edit"

Этот маршрут даст вам именованный маршрут с именем edit_profile_path

3
ответ дан 14 December 2019 в 08:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: