2012-05-11 1 views
2

Я начинаю с рельсов и разрабатываю для аутентификации, и я хочу сделать ссылку, чтобы выйти, когда пользователь зашел на страницу администратора.Rails правильный способ использования link_to с помощью devase

Что такое правильный способ написания 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] "https://stackoverflow.com/users/sign_out" 
+0

возможный дубликат [Ruby On Rails разработать 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

Из этого 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? Это верно для всех ссылок на метод удаления? – Catfish

+0

Да, вы правы, всегда используйте ': method =>: delete /: put /: post' для ваших маршрутов RESTful. –

+0

ссылка на образец приложения не работает –

1

Ошибка корня вашей проблемы в том, что вы не используете маршруты RESTful в своем «link_to».

вы должны исправить свой код:

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

так, что она будет соответствовать маршрутам

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

Что значит, что я не использовал спокойные маршруты? Почти все эти маршруты были созданы из драгоценного камня. – Catfish

+0

ОК моя ошибка. Я исправил непонятный текст. вы должны называть «link_to» способом RESTful (с параметром «метод») –

Смежные вопросы