Я хотел бы создать маршрут направляющих для того, чтобы изменить профиль пользователя.
Вместо того, чтобы иметь необходимость использовать/users/:id/edit, я хотел бы иметь URL как/edit_profile
Действительно ли возможно создать динамический маршрут, который поворачивает/edit_profile в/users/{идентификатор пользователя} / редактирование, или я должен сделать вещь в контроллере или?
Возможно, вы захотите создать отдельный контроллер для этой задачи, но вы также можете продолжить использовать 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».
Поскольку маршрут и контроллер служат двум разным целям, вам понадобятся оба.
Для контроллера, предполагая, что вы сохраняете идентификатор пользователя в сеансе, вы можете просто сделать так, чтобы ваш метод редактирования выполнял что-то вроде:
def edit
@user = User.find(session[:user_id])
end
Затем создайте маршрут, который выглядит примерно так:
map.edit_profile "edit_profile", :controller => "users", :action => "edit"
Этот маршрут даст вам именованный маршрут с именем edit_profile_path