2010-01-30 11 views
6

मैंने रीस्टफुल प्रमाणीकरण स्थापित किया है और सबकुछ ठीक काम कर रहा है। मैं साइन अप और लॉगिन कर सकता हूँ। लॉगआउट कर सकते हैं एकमात्र तरीका यूआरएल http://localhost:3000/logoutRESTFUL प्रमाणीकरण में एक लॉगआउट बटन जोड़ें

में टाइप करके है, मैं किसी पृष्ठ पर लॉगआउट बटन कैसे जोड़ूं? मैं members.rhtml

<%= link_to "logout", :controller=> "sessions", :action=> "destroy" %> 

session_controller.rb का संदर्भ, लेकिन मैं कोई त्रुटि मिलती है जो करने के लिए एक जोड़ने की कोशिश की "कोई कार्रवाई दिखाने के लिए प्रतिक्रिया व्यक्त की गई कार्रवाइयां:।, बनाने को नष्ट, और नई '

कोई विचार ? thanx

उत्तर

7

आपके मार्ग फ़ाइल में आपके पास क्या है?

कोशिश अपने मार्गों में

map.log_out 'logout', :controller => 'sessions', :action => 'destroy' 

डाल।

तो बस

<%= link_to "Sign out", log_out_url %> 
साइन आउट लिंक के लिए

है।

संपादित

सब कैसे आप मार्ग निर्दिष्ट करने के लिए नीचे अपने।

क्योंकि आपके पास रूटिंग में map.log_out था, तो यूआरएल http://localhost:3000/logout यूआरएल इसे उठाया गया है और सही कार्रवाई के लिए भेजा गया है।

यदि आपके पास:

<%= link_to "logout", :controller=> "sessions", :action=> "destroy" %> 

यह सिर्फ http://localhost:3000/session की आप के लिए एक लिंक उत्पन्न होगा। लेकिन, यह रूटिंग के लिए कुछ भी नहीं करता है। आपको अभी भी सही मार्ग निर्दिष्ट करने की आवश्यकता है।

ध्यान दें कि रेल यूआरएल को नष्ट करने की क्रिया को शामिल नहीं करते हैं। (यह http://localhost:3000/session/destroy नहीं बनाएगा।) यह मानता है कि यदि आपके पास नष्ट करने की कोई कार्रवाई है तो आप इसे एक DELETE http क्रिया के साथ भेज देंगे। किसी कारण से, यह बिल्कुल सही नहीं है और यह वास्तव में DELETE क्रिया भेजने के लिए भी डिफ़ॉल्ट नहीं है।

ऐसा करने के लिए यह मजबूर कर सकते हैं:

<%= link_to "logout", {:controller=> "user_sessions", :action=> "destroy"}, :method => :delete%> 

यह अभी भी जब तक आप इसे सही ढंग से काम नहीं करेगा भी मार्ग। यदि आप डाल मार्गों में निम्नलिखित:

map.resource :session 

फिर रेल सभी क्रियाओं को आवागमन की पैदा करते हैं और उनके लिए डिफ़ॉल्ट क्रिया को निर्दिष्ट करेगा, DELETE भी शामिल है। अधिक जानकारी यहां मिल सकती है: Rails Routing from the Outside In

वह पूरा पृष्ठ पढ़ने के लायक है जब तक कि आप वास्तव में इसे समझ नहीं लेते। रेल समझने के लिए रूटिंग महत्वपूर्ण है!

सत्रों जैसे साधारण नियंत्रक के लिए, लॉग_आउट रूट निर्दिष्ट करना और फिर log_out_url से लिंक करना आसान है ..

(आशा है कि भावना, सो हानि में पैर पसार रही है बनाता है!)

+0

के लिए लॉगआउट पथ बदल के रूप में अन्य मॉडल नाम निर्धारित ' – pixeltocode

+0

कमाल ... यह काम किया! मैंने <% = link_to "साइन आउट" का उपयोग किया, logout_url%> धन्यवाद – pixeltocode

+0

सिर्फ जिज्ञासा से बाहर ... <% = link_to "logout" नहीं होना चाहिए: नियंत्रक => "सत्र",: action => "नष्ट"%> भी काम करते हैं? यह session_controller में 'नष्ट' def का संदर्भ दे रहा है, जो उस के लिए 'लॉगआउट' – pixeltocode

0

आप उपयोग कर रहे हैं वसीयत और अपने चिंतित मॉडल है उपयोगकर्ता, सुरुचिपूर्ण तरीका यहां है:

<%= link_to 'logout', destroy_user_session_path, method: :delete %>

यह काम करता है क्योंकि:

  • HTTP विधियों के कारण मिलता है, पोस्ट, PUT, पैच और DELETE, तो method: :delete का उपयोग कर (नहीं method: :destroy प्रश्न के रूप में)
  • हम प्रयोग कर रहे वसीयत और उपयोगकर्ता हमेशा की तरह मॉडल destroy_user_session_pathसाथ द्वारा फिक्सिंग, अगर कर रहे हैं नियंत्रक => 'सत्र',: कार्रवाई => 'को नष्ट आप इस तरह के प्रबंधक तुम सिर्फ मेरी routes.rb map.logout'/लॉगआउट ', है destroy_manager_session_path