2012-05-11 23 views
2

我開始接觸軌和設計進行驗證,我想打一個鏈接,當用戶登錄到管理頁面登出。Rails的正確的使用方法使用的link_to色器件

什麼是寫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

的[紅寶石可能重複設計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

是的,你說的對,你的RESTful路由總是使用':method =>:delete /:put /:post'。 –

+0

鏈接示例應用程序被打破 –

1

你的問題的根本錯誤是,你有沒有在你的「的link_to」使用REST風格的路線。

請更正代碼:

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

所以它將匹配路由on Rails的

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

你的意思是我沒有用寧靜的路線一個新的例子?幾乎所有這些路線都是從tedeg gem生成的。 – Catfish

+0

好吧,我的錯誤。我糾正了混亂的文字。你應該用REST風格的方式調用'link_to'(使用參數'method') –