如何使用漂亮的URL自定义edit_user_path

时间:2011-09-09 22:05:44

标签: ruby-on-rails authentication authlogic permalinks

我在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以防止用户请求不属于他/她的其他用户ID。它应该抛出404页面是完美的。

导航菜单中的当前路径:

退出:/account/logout

登录:/account/login

注册:/register

我希望为edit_user_path提供另一条路径:

修改个人资料:/account/edit

有什么方法可以简单地使用edit_user_path(current_user.id),路径会自动将我转移到/ account / edit并禁用id请求。

任何帮助将不胜感激!谢谢!

[已更新] 这是我的/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 :(得分:0)

如果您包含所有相关路线(这也意味着用户的路线)会很有帮助。你创建了那些:

resources :users

如果您这样做了,您将必须禁用该命令并仅使用手动重新创建所需的路线(例如!):

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

或控制器的任何名称。这样你就可以获得“/ account / edit” - 但是,你也无法以这种方式转移用户ID。那个你必须通过其他方式转移,例如通过存储在cookie或会话中的变量。 无论如何,后一种方法是记住用户身份验证的常用方法。