Как настроить edit_user_path с красивым URL - PullRequest
1 голос
/ 10 сентября 2011

Я добавляю навигационное меню в application.html.erb, которое перемещается по пользователям в authlogic.Все маршрутизаторы, такие как:: logout,: register и: login, кажется, работают с пользовательскими путями.

match 'account/login' => 'user_sessions#new', :as => :login
match 'account/logout' => 'user_sessions#destroy', :as => :logout
match 'register' => 'users#new', :as => :register

Вот меню навигации:

<% if current_user %>
    <%= link_to "Edit Profile", edit_user_path(current_user.id)%> <%=h current_user.firstname %>
    <%= link_to "Logout", :logout %>
<% else %>
    <%= link_to "Register", :register %> | 
    <%= link_to "Login", :login %>
<% end %>

Но edit_user_path переводит меня в /users/:id/edit,Как мне сделать хороший URL для этого пути.Я хотел бы сделать это /account/edit.Также необходимо отключить этот путь /users/:id/edit, чтобы пользователь не запрашивал другой идентификатор пользователя, который ему не принадлежит.Стоит выбросить 404 страницы идеально.

Текущие пути в навигационном меню:

Выйти: /account/logout

Логин: /account/login

Регистрация: /register

Я хотел бы иметь другой путь для edit_user_path:

Редактировать профиль: /account/edit

Есть ли способ, которым я могу просто использовать edit_user_path (current_user.id) и путь автоматически переводит меня в / account / edit и отключает запрос идентификатора.

Любая помощь будет принята с благодарностью!Спасибо!

[Обновлено] Это моя /config/router.rb

Appcatous::Application.routes.draw do
  resources :users, :user_sessions

  match "account" => "users#show", :as => :account
  match 'account/login' => 'user_sessions#new', :as => :login
  match 'account/logout' => 'user_sessions#destroy', :as => :logout
end

users.rb модель очень проста:

class User < ActiveRecord::Base
  acts_as_authentic

  validates :firstname, :presence => true  
  validates :lastname,  :presence => true 

end

1 Ответ

0 голосов
/ 10 сентября 2011

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

resources :users

Если вы это сделали, вам придется отключить эту команду и воссоздать только те маршруты, которые вам нужны, вручную (пример!):

match 'account/edit' => 'users#edit', :as => :edit_user

или как называется ваш контроллер.Таким образом, вы получите «/ account / edit» - однако у вас также не будет возможности передать идентификатор пользователя таким способом.Тот, который вы должны будете передать другими способами, например, через переменную, сохраненную в куки или сеансе.Последний метод - это обычный способ запоминания аутентификации пользователя.

...