2012-05-11 14 views
2

私はレールを使い始める前に認証を行い、ユーザーが管理ページにログインしたときにサインアウトするリンクを作りたいと思っています。レールを正しく使用する方法link_to with devise

admin_index  /admin/index(.:format)   {:controller=>"admin/home", :action=>"index"} 
     new_user_session GET /users/sign_in(.:format)  {:action=>"new", :controller=>"devise/sessions"} 
      user_session POST /users/sign_in(.:format)  {:action=>"create", :controller=>"devise/sessions"} 
    destroy_user_session DELETE /users/sign_out(.:format)  {:action=>"destroy", :controller=>"devise/sessions"} 
      user_password POST /users/password(.:format)  {:action=>"create", :controller=>"devise/passwords"} 
     new_user_password GET /users/password/new(.:format) {:action=>"new", :controller=>"devise/passwords"} 
     edit_user_password GET /users/password/edit(.:format) {:action=>"edit", :controller=>"devise/passwords"} 
         PUT /users/password(.:format)  {:action=>"update", :controller=>"devise/passwords"} 
cancel_user_registration GET /users/cancel(.:format)  {:action=>"cancel", :controller=>"devise/registrations"} 
     user_registration POST /users(.:format)    {:action=>"create", :controller=>"devise/registrations"} 
    new_user_registration GET /users/sign_up(.:format)  {:action=>"new", :controller=>"devise/registrations"} 
    edit_user_registration GET /users/edit(.:format)   {:action=>"edit", :controller=>"devise/registrations"} 
         PUT /users(.:format)    {:action=>"update", :controller=>"devise/registrations"} 
         DELETE /users(.:format)    {:action=>"destroy", :controller=>"devise/registrations"} 
       home_index GET /home/index(.:format)   {:controller=>"home", :action=>"index"} 
        root  /       {:controller=>"home", :action=>"index"} 

私は<%= link_to "Sign Out", destroy_user_session_path %>を試してみましたが、私は、リンクをクリックしたときに、それは私にエラーを与える:

No route matches [GET] "https://stackoverflow.com/users/sign_out" 
+0

と一致するように、可能性の重複はhttp://0.0.0.0:3000/usersを考案します/ sign_outがルーティングエラーを取得する](http://stackoverflow.com/questions/7704130/ruby-on-rails-devise-http-0-0-0-03000-users-sign-out-gets-routing-error) – Gareth

答えて

4

link_to code

を書き込むための正しい方法は、ここに私のrake routesだは何

このdevise sample applicationから、Devise wiki

でお勧めします
<% if user_signed_in? %> 
    <li><%= link_to 'Edit account', edit_user_registration_path %></li> 
    <li><%= link_to 'Sign out', destroy_user_session_path, :method=>'delete' %></li> 
<% end %> 
+0

ですから、私は ':method =>:delete'を必要とします。なぜなら、postメソッドではなくdeleteメソッドだからです。それは削除メソッドへのすべてのリンクに当てはまりますか? – Catfish

+0

はい、あなたは正しいです、あなたのRESTfulなルートのために常に ':method =>:delete /:put /:post'を使用してください。 –

+0

サンプルアプリケーションへのリンクが壊れています –

1

あなたの問題のルートエラーは、あなたの "link_to"でRESTfulルートを使用していないことです。あなたがあなたのコードを修正する必要があり

<%= link_to "Sign Out", destroy_user_session_path, :method => :delete %> 

のRuby on Rails [のそれがルートに

DELETE /users(.:format) {:action=>"destroy", :controller=>"devise/registrations" } 
+0

安らかなルートを使用していないということはどういう意味ですか?これらのルートのほとんどは、宝石から作られたものです。 – Catfish

+0

私の間違いです。私は混乱するテキストを修正しました。 'link_to'をRESTfulな方法で呼び出す必要があります(パラメータ 'method'を使用) –