2011-09-09 13 views
1

authlogicのユーザをナビゲートするapplication.html.erbにnavメニューを追加します。 ::logout、:register、:loginなどのすべてのルータは、カスタムパスで動作しているようです。ここで素敵なURLでカスタムedit_user_pathを作成する方法

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に私を転送しています。このパスのnice URLを作成するにはどうすればよいですか。私はそれを/account/editにしたいと思います。また、このパス/users/:id/editを無効にして、ユーザーが他のユーザーIDを要求しないようにする必要があります。それは404ページが完璧ですスローする必要があります。ナビゲーション・メニューの

現在のパス:

ログアウト:/account/logout

ログイン:/account/login

登録:

:私はedit_user_pathのための別のパスを持っているのが大好きだ

/registerプロフィールの編集:/account/edit

edit_user_path(current_user.id)を使用する方法はありますか?パスは自動的に/ account/edit/disableに転送されます。

ご協力いただければ幸いです。ありがとう!

[更新]これは

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モデルは非常に単純で、私の/config/router.rbです:

class User < ActiveRecord::Base 
    acts_as_authentic 

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

end 

答えて

0

あなたはすべてのルートが含まれている場合それが参考になりますこれは、ユーザーのルートも意味します。あなたが持つものを作成しました:あなたがやった場合

resources :users 

を、あなたはそのコマンドを無効にします(!例)を用いて手動で必要なだけのルートを再作成する必要があります:

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

または何あなたのコントローラーの名前が付けられます。そうすれば、あなたはあなたの "/ account/edit"を手に入れることができます。しかし、そのようにユーザーIDを転送する方法もありません。 Cookieやセッションに格納された変数など、他の方法で転送する必要があるもの。 後者の方法は、とにかくユーザーの認証を記憶する通常の方法です。

+0

こんにちは、私はすでにそれをしましたが、私はそのようには好きではありません。私はユーザーがIDを要求するのを防ぐだろう。カスタムルーターを使用するのは簡単な解決策ですが、ユーザーは/ users /:id/editにアクセスできます。私の質問は、テンプレートコードで** edit_user_path(current_user.id)**を引き続き使用できますが、パスが変更された場合です。 – lnguyen55

+1

'resources:users'の代わりにカスタムルートを使用する場合、no、ユーザーは/ users /:id/editにアクセスすることはできません。そして、あなたはそれを両方の方法で持つことはできません - あなたはURLにIDを持っているか、そうではありません。しかし、後者の場合はセッションやクッキーで輸送する必要があります。結局のところ、httpはステートレスなプロトコルです。 – Rhywden

+0

hmm、 'current_user.id'は' resources:users'なしでもう動作しないようです。 – lnguyen55

関連する問題