2

Railsを使い始め、認証を考案しました。ユーザーが管理ページにログインしたときにサインアウトするためのリンクを作成したいと思います。

を書く正しい方法は何ですかlink_to code

これが私のrake routes

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] "/users/sign_out"
4

2 に答える 2

5

このdeviseサンプルアプリケーションから、 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 %>
于 2012-05-11T23:49:34.360 に答える
1

問題の根本的なエラーは、「link_to」でRESTfulルートを使用していないことです。

コードを次のように修正する必要があります。

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

ルートと一致するように

DELETE /users(.:format)  {:action=>"destroy", :controller=>"devise/registrations" }
于 2012-05-11T23:53:44.820 に答える