2012-03-06 9 views
6

मैं थोड़ा उलझन में हूं कि मेरे अनुरोधों को कैसे तैयार किया जा रहा है, किसी कारण से मैं अपने ऐप में साइन-आउट पथ पर नहीं जा सकता अब:डेविस/रेल: कोई रूट मैचों [GET] "/ उपयोगकर्ता/sign_out"

devise_for :users, :controllers => {:registrations => "registrations"} 
devise_scope :user do 
    get '/settings' => 'registrations#edit' 
end 

चाहेंगे कि गुंजाइश को परिभाषित करने के साथ-साथ काम करने से मेरे दूसरे मार्गों को रोकने:

ActionController::RoutingError (No route matches [GET] "https://stackoverflow.com/users/sign_out") 

यहाँ क्या मेरी उपयोगकर्ता मॉडल और तैयार करने से संबंधित मेरी मार्गों की तरह लग रही है?

अद्यतन

मुझे नहीं लगता है कि यह, के रूप में अपने लिंक की तरह लग रहा GET अनुरोध माना जाता है है:

यह:

<%= link_to "Sign out", destroy_user_session_path, :method => :delete %> 
+0

यह एक डेली अनुरोध होना चाहिए। क्या होगा यदि आप अपने मार्गों में उपयोगकर्ताओं को devise_for छोड़ दें? – gtr32x

+1

क्या आपकी जावास्क्रिप्ट किसी भी त्रुटि को फेंक रही है? यह वास्तव में अविभाज्य जावास्क्रिप्ट है जो इसे एक डेलीट http कॉल करने जा रहा है। –

+0

आपकी डिवाइस कॉन्फ़िगरेशन फ़ाइल में निम्न आइटम के लिए क्या है: '' 'config.sign_out_via''' –

उत्तर

14

आप अपने ब्राउज़र के एड्रेस बार में उसे लिखने, या सामान्य रूप से इसे करने के लिए जोड़ने के द्वारा करने के लिए/उपयोगकर्ताओं/sign_out जाने की कोशिश करते हैं, तो आपको यह त्रुटि मिल जाएगा। यहां कुछ टिप्पणियों और उत्तरों को संक्षेप में सारांशित करने के लिए जिथब पर डिवीज रेपो में मुद्दों से:

यह इच्छित कार्यक्षमता है, रीस्टफुल ऐप्स को जीईटी अनुरोध के साथ राज्य को संशोधित नहीं करना चाहिए।

आप इसे एक लिंक बनाकर ठीक कर सकते हैं जो @Trip, @fuzzyalej द्वारा उल्लिखित DELETE विधि का उपयोग करता है, और @ जोसेफ सिल्वाशी द्वारा अपडेट किया गया है।

वैकल्पिक रूप से, (और कम सिफारिश की), /config/initializers/devise.rb में, आपको निम्न परिवर्तन करते समय निम्न कर सकता है

config.sign_out_via = :delete 

को
config.sign_out_via = :get 

मैं इस मुद्दे में आए http://railscasts.com/episodes/209-introducing-devise के साथ और वहां के पुराने संस्करण के साथ वह वहां उपयोग कर रहा है, यह कोई मुद्दा नहीं था।

+1

मेरे लिए, 'application.js' सिर्फ सादा गायब था (railswizard.com से रेल 4 टेम्पलेट) और लाइनों की आवश्यकता है: '// = jquery // = jquery_ujs' – snowking16

7

जैसा कि इस पोस्ट एक जवाब है विधि, delete के साथ भेजा जाना चाहिए ताकि यह get

पर डिफ़ॉल्ट नहीं है
0
rails documentation से

:

link_to("Destroy", "http://www.example.com", :method => :delete, :confirm => "Are you sure?") 
# => <a href='http://www.example.com' rel="nofollow" data-method="delete" data-confirm="Are you sure?">Destroy</a> 
3

यदि आप डेविस नियंत्रकों के साथ एसएसएल का उपयोग कर रहे हैं, और 'http' यूआरएल से साइन आउट करने का प्रयास कर रहे हैं, तो क्या हो रहा है यह #Destroy विधि को DELETE अनुरोध भेज रहा है, लेकिन फिर GET के माध्यम से https संस्करण पर रीडायरेक्ट कर रहा है।

= link_to "Sign out", destroy_user_session_url(protocol: 'https'), method: :delete 

नोट:: तुम कितने तरह लिंक प्रस्थान करने के लिए https जोड़कर इसे ठीक कर सकते 'पथ'

+0

परिवर्तन के बाद: सुरक्षित कनेक्शन विफल! (त्रुटि कोड: ssl_error_rx_record_too_long) – Dineshkumar

0

मैं एक ही समस्या थी और हल करने के लिए यह इन ले लिया करने के बजाय होना चाहिए 'url' कदम: 1) शामिल हैं // = आस्तियों/javascripts में jquery_ujs की आवश्यकता होती है/application.js 2) मेरी gemfile 3) बंडल की मणि 'jQuery-रेल' जोड़ने स्थापित

... और यह काम किया।

संबंधित मुद्दे