दिलचस्प पोस्ट
कैसे मैं आईओएस में एक विशिष्ट उपयोगकर्ता के लिए एक संदेश लिखने के लिए WhatsApp रहना मिलता है? ReactJS में इस। स्टेटीज और this.setstate के अंतर क्या है? अद्वितीय मूल्यों के साथ क्रमांतर जावा में फ़ाइल नाम सार्वजनिक वर्ग के नाम के समान क्यों हैं? डॉकर – कॉर्पोरेट नेटवर्क पर छवि निर्माण के दौरान नेटवर्क कॉल विफल देखो और महसूस स्विंग जेटबबेदपैन में अपडेट नहीं कर रहा है खिड़कियों पर रूबी / रेल चलाने में सीमाएं सी बहुआयामी सरणी में सूचक पता ASP.NET MVC 3 रेज़र के साथ Ajax.BeginForm का उपयोग करना array_key_exists काम नहीं कर रहा है यादृच्छिक संख्याएं जो 100 से जोड़ती हैं: Matlab कैसे json परिणाम jquery में पढ़ने के लिए? टेम्पलेट टेम्पलेट पैरामीटर के कुछ उपयोग सी ++ में क्या हैं? सीएसएस के माध्यम से पीएनजी छवि का रंग बदलें? जावा डीबगिंग करते समय वैरिएबल जानकारी को समझना

कोई मार्ग मेल नहीं है "/ उपयोगकर्ता / साइन-आउट" रेल 3 तैयार करें

मैंने अपने ऐप पर योजना बना ली है और मेरे application.html.erb फ़ाइल में निम्न लागू किया है:

 <div id="user_nav"> <% if user_signed_in? %> Signed in as <%= current_user.email %>. This cannot be cheese? <%= link_to 'Sign out', destroy_user_session_path %> <% else %> <%= link_to 'Register', new_user_registration_path %> or <%= link_to 'Sign in', new_user_session_path %> <% end %> </div> 

मैं rake routes चला गया और पुष्टि की कि सभी मार्ग वैध हैं

इसके अलावा, मेरे devise_for :users में। devise_for :users फ़ाइल में मेरे पास devise_for :users and root :to => "home#index"

"साइन आउट" लिंक पर क्लिक करते समय मुझे निम्नलिखित रूटिंग त्रुटि मिलती है:

 No route matches "/users/sign_out" 

कोई भी विचार जो त्रुटि पैदा कर रहा है?

वेब के समाधान से एकत्रित समाधान "कोई मार्ग मेल नहीं है "/ उपयोगकर्ता / साइन-आउट" रेल 3 तैयार करें"

मुझे लगता है कि साइन आउट करने का मार्ग एक DELETE विधि है इसका मतलब यह है कि आपका साइन आउट लिंक इस तरह दिखना चाहिए:

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

आपका इसमें शामिल नहीं है :method => :delete भाग को :method => :delete इसके अलावा, कृपया ध्यान दें कि इसके लिए काम करने के लिए आपको <%= javascript_include_tag :defaults %> अपनी लेआउट फ़ाइल ( application.html.erb ) में <%= javascript_include_tag :defaults %> शामिल करना होगा।

मैंने इस रेखा को devise.rb में बदल दिया है:

 config.sign_out_via = :delete 

सेवा मेरे

 config.sign_out_via = :get 

और यह मेरे लिए काम करना शुरू कर दिया।

आप शायद jquery_ujs javascript फ़ाइल को शामिल नहीं किया था। सुनिश्चित करें कि आप jquery-ujs के नवीनतम संस्करण का उपयोग कर रहे हैं: https://github.com/rails/jquery-ujs और उपलब्ध अंतिम फ़ाइलें:

 rails generate jquery:install 

आपके पास कोई और रेल। जेएस फाइल नहीं होनी चाहिए। यदि आप करते हैं, तो आप संभवत: पुरानी हो सुनिश्चित करें कि यह फ़ाइल डिफ़ॉल्ट के साथ भी लोड की गई है, config / application.rb में

 config.action_view.javascript_expansions[:defaults] = %w(jquery.min jquery_ujs) 

(फिर से, आपको रेल। जेएस फ़ाइल नहीं होनी चाहिए)। अंत में, लिंक को डेवलसे विकी (haml-style) पर दर्ज़ करें:

 = link_to('Logout', destroy_user_session_path, :method => 'delete') 

और सब ठीक हो जाएगा।

लॉगआउट लिंक को data-method = "delete" = link_to('Logout', destroy_user_session_path, :method => :delete) कॉल करने की क्षमता के लिए एक html विशेषता data-method = "delete" आवश्यकता होती है, रेल कोड = link_to('Logout', destroy_user_session_path, :method => :delete)

हालांकि, यदि आपके पास मणि jquery-ujs स्थापित नहीं है या आपके application.html में = javascript_include_tag "application" माध्यम से परिणामस्वरूप जावास्क्रिप्ट नहीं बुला रहे हैं, तो प्रतिसाद GET अनुरोध के रूप में भेजा जाएगा, और मार्ग विफल हो जाएगा।

आपके पास कुछ विकल्प हैं यदि आप jquery-ujs का उपयोग नहीं करना चाहते हैं या इसे काम करने का कोई तरीका नहीं मिल सकता है:

  1. devise.rb को बराबर बदलें :get devise.rb भीतर devise.rb (अनुशंसित नहीं है, चूंकि DELETE उपयुक्त शोकहारा क्वेरी है)
  2. या = button_to('Logout', destroy_user_session_path, :method => :delete) को = button_to('Logout', destroy_user_session_path, :method => :delete) बदलें = button_to('Logout', destroy_user_session_path, :method => :delete)button_to साथ button_to कॉल करने पर भारी भार button_to । आप चाहें तो बटन को एक लिंक की तरह देख सकते हैं।

Devise / sessions # को नष्ट करने और उसके साथ जोड़ने के लिए एक नया मार्ग जोड़ने का प्रयास करें। उदाहरण के लिए:

 routes.rb devise_for :users do get 'logout' => 'devise/sessions#destroy' end 

राय:

 <%= link_to "Logout", logout_path %> 

इसे अपने routes.rb फ़ाइल में प्रयोग करें:

 devise_for :users do get '/users/sign_out' => 'devise/sessions#destroy' end 

मुझे रेल 3.1.0 के साथ एक ही समस्या थी, और मैंने फ़ाइल को अनुवर्ती लाइनों में जोड़ने का हल किया:

 app/assets/javascripts/application.js //= require_tree //= require jquery //= require jquery_ujs 

एक अपवाद के साथ, जेसी के जवाब ने मेरे लिए काम किया:

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

परिवर्तन:

 :delete 

… सेवा मेरे:

 'delete' 

तो मेरे लिए काम करने वाला कोड है:

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

पहले से ही प्रश्न के उत्तर मेरे लिए समस्या दो गुना थी:

  1. जब मैं अपने मार्गों का विस्तार करता हूं:

     devise_for :users do get '/users/sign_out' => 'devise/sessions#destroy' end 
  2. मुझे चेतावनी मिली थी कि यह घिस रहा है, इसलिए मैंने इसके साथ प्रतिस्थापित किया है:

     devise_scope :users do get '/users/sign_out' => 'devise/sessions#destroy' end 
  3. मैंने सोचा कि मैं अपने jQuery को निकाल दूंगा। खराब चुनाव। Devise "नकली" DELETE अनुरोध करने के लिए jQuery का उपयोग कर रहा है और इसे GET के रूप में भेजें। इसलिए आपको निम्न करने की आवश्यकता है:

     //= require jquery //= require jquery_ujs 
  4. और निश्चित रूप से एक ही लिंक के रूप में पहले उल्लेख किया गया है:

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

जोड़ें:

  <%= csrf_meta_tag %> and <%= javascript_include_tag :defaults %> to layouts 

इन लिंक_ टैगों का उपयोग करें

  link_to 'Sign out', destroy_user_session_path, :method => :delete or link_to 'Sign out', '/users/sign_out', :method => :delete 

मार्गों में जोड़ें:

  devise_for :users do get '/users/sign_out' => 'devise/sessions#destroy' end 

अन्य विकल्प लॉगआउट को DELETE के बजाय GET के रूप में कॉन्फ़िगर करने के लिए है, आप ऐसा कर सकते हैं कि /config/initializers/devise.rb पर निम्न पंक्ति /config/initializers/devise.rb

 config.sign_out_via = :get 

लेकिन जैसा कि स्टीव क्लबानिक ने अपने ब्लॉग पर लिखा था (http://blog.steveklabnik.com/2011/12/11/devise-actioncontroller-routingerror-no-route-matches-get-slash-users-slash-sign-out.html ) इस विधि के अर्थ की वजह से DELETE का उपयोग करने का प्रयास करें

यदि आप रेल 3.1 का उपयोग कर रहे हैं तो सुनिश्चित करें कि आपका application.html.erb साइन आउट ऐसा दिखता है:

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

और यह कि आपके जावास्क्रिप्ट में रेखाएं निम्न की तरह दिखती हैं

<%= javascript_include_tag 'application' %>

मेरा अनुमान है कि कुछ रत्न default.js स्थान की नई संरचना को अधिलेखित करते हैं।

इसे गिटब में स्रोत कोड के साथ देखें:

https://github.com/plataformatec/devise/commit/adb127bb3e3b334cba903db2c21710e8c41c2b40#lib/generators/templates/devise.rb (दिनांक: 27 जून, 2011)

  • # एक संसाधन को साइन आउट करने के लिए उपयोग की जाने वाली डिफ़ॉल्ट HTTP विधि डिफ़ॉल्ट है: प्राप्त करें 188
  • # config.sign_out_via =: 187 प्राप्त करें
  • # एक संसाधन को साइन आउट करने के लिए उपयोग की जाने वाली डिफ़ॉल्ट HTTP विधि डिफ़ॉल्ट है: हटाएं 188
  • config.sign_out_via =: हटाएं

खैर, मेरे लिए लोग इसे केवल निकाला गया था: method =>: हटाएं

 <%= link_to('Sign out', destroy_user_session_path) %> 

इसका अर्थ है कि आपने jquery-rails मणि स्थापित करने के बाद jquery फ़ाइलों को नहीं बनाया है। तो पहले आपको इसे बनाना होगा।

rails generate devise:install

पहला विकल्प:

इसका अर्थ है कि आपको /config/initializers/devise.rb पर निम्न पंक्ति को /config/initializers/devise.rb

config.sign_out_via =: config.sign_out_via को हटाएं: प्राप्त करें

दूसरा विकल्प:

आप केवल इस लाइन <%= link_to "Sign out", destroy_user_session_path %> से <%= link_to "Sign out", destroy_user_session_path, :method => :delete %> को फ़ाइल देखें।

आमतौर पर :method => :delete डिफ़ॉल्ट रूप से नहीं लिखी गई है

मैं इसे जोड़ना चाहता हूं, हालांकि यह थोड़ा पुराना है।

"साइन_आउट" लिंक काम नहीं कर रहा था, इसके बावजूद: method =>: हटाएं

टिप्पणी यह ​​दर्शाती है कि <%= javascript_include_tag :defaults %> को शामिल करना चाहिए मुझे याद दिलाया है कि मैंने हाल ही में JQuery जावा स्क्रिप्ट को जोड़ा है और उन्हें शामिल करने के लिए सरल <script src=""/> टैग का उपयोग किया है।

जब मैंने उन्हें उनसे बाद में स्थानांतरित किया: डिफ़ॉल्ट से पहले, sign_out फिर से काम करना शुरू हुआ।

उम्मीद है कि यह किसी को मदद करता है

अपने application.js (रेल 3) में निम्नलिखित पंक्ति को शामिल करने के लिए मत भूलना

 //= require_self //= require jquery //= require jquery_ujs 

मेरे रेल आवेदन में jquery_ujs शामिल करें और यह अब काम करता है।

अधिकांश उत्तर आंशिक हैं मैंने इस मुद्दे को कई बार मारा है दो चीजों को संबोधित करने की जरूरत है:

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

हटाना विधि निर्दिष्ट करने की आवश्यकता है

फिर devise jquery का उपयोग करता है, तो आप उन लोड करने की जरूरत है

  <%= javascript_include_tag "myDirectiveJSfile" %> 

और यह सुनिश्चित करें कि दोनों jquery और jquery-ujs आपके myDirectiveJSfile.js में निर्दिष्ट हैं

 //= require jquery //= require jquery_ujs 

यदि आप योजना के साथ HTTPS का उपयोग कर रहे हैं , तो यह तोड़ जाएगा अगर आपका साइन-आउट लिंक गैर-सुरक्षित संस्करण पर है पीछे के अंत में, यह सुरक्षित संस्करण को रीडायरेक्ट करता है। वह रीडायरेक्ट एक GET है, जिससे समस्या का कारण बनता है।

सुनिश्चित करें कि आपका लिंक HTTPS का उपयोग करता है आप इसे protocol: "https" साथ बाध्य कर सकते हैं protocol: "https" अपने यूआरएल सहायक में protocol: "https" (सुनिश्चित करें कि आप url सहायक का उपयोग करते हैं और पथ सहायक नहीं)।

 <%= link_to "Sign out", destroy_user_session_url(protocol: "https"), method: :delete %> 

आपके मार्गों में। आरबी:

  devise_for :users do get '/sign_out' => 'devise/sessions#destroy' get '/log_in' => 'devise/sessions#new' get '/log_out' => 'devise/sessions#destroy' get '/sign_up' => 'devise/registrations#new' get '/edit_profile' => 'devise/registrations#edit' end 

और आपके application.html.erb में:

 <%if user_signed_in?%> <li><%= link_to "Sign_out", sign_out_path %></li> <% end %> 

यह मैंने किया है (रेल 3.0 के साथ और 1.4.2 डिवीज़):

  1. सुनिश्चित करें कि आपके पेज लोड रेल। Js
  2. इस परम का प्रयोग करें: 'डेटा-पद्धति' => 'हटाना'
  3. इस परम को जोड़ने के लिए अच्छा विचार: rel => 'nofollow'

':method => :delete ' पृष्ठ में ' data-method="delete" 'है, इसलिए आपके पृष्ठ में jquery_ujs.js होना आवश्यक है, यह विधि के साथ लिंक सबमिट करेगा विधि को नहीं हटाएं

समस्या पटरियों के साथ शुरू 3.1 … में /app/assets/javascript/ सिर्फ application.js के लिए देखो

अगर फ़ाइल मौजूद नहीं है, तो उस नाम के साथ एक फ़ाइल बनाएं मुझे नहीं पता कि मेरी फ़ाइल गायब क्यों हुई या कभी "rails new app"... पर नहीं बनाया गया था "rails new app"...

उस फ़ाइल को jquery... लिए उदाहरण है jquery...

बहुत सारे समाधान हैं लेकिन ज्यादातर इसका उपयोग करते हैं,

 <%= link_to 'Sign out', destroy_user_session_path, method: :delete %> 

या config devise.rb उचित sign_out विधि के साथ

Devise.rb में

 config.sign_out_via = :delete ( or :get which u like to use.) 

उपयोग करें :get और अपने पथ के लिए विधि को :delete :

 devise_scope :user do match '/users/sign_out' => 'devise/sessions#destroy', :as => :destroy_user_session, via: [:get, :delete] end 

देखें कि क्या आपके मार्गों में। Routes के लिए "संसाधन: उपयोगकर्ता" है, "उपयोगकर्ता के लिए devise_": फिर उन्हें गमागमन करने का प्रयास करें:

  1. काम करता है

    • devise_for: प्रयोक्ता
    • संसाधन: उपयोगकर्ता
  2. विफल रहता है

    • संसाधन: उपयोगकर्ता
    • devise_for: प्रयोक्ता

सामान्य तौर पर जब आप "कोई रूट मैचों" नहीं मिलता है, लेकिन आपको लगता है कि आपके पास निर्धारित मार्ग है, तो उस मार्ग के लिए http verb / अनुरोध विधि (चाहे इसकी मिल, रख, पोस्ट, हटाएं आदि) दोबारा जांचें

यदि आप रेक मार्ग चलाते हैं तो आपको अपेक्षित पद्धति दिखाई देगी और आप अनुरोध लॉग के साथ इसकी तुलना कर सकते हैं।

  devise_for :users devise_scope :user do get '/users/sign_out' => 'devise/sessions#destroy' end 

मुझे पता है कि रेलवे 3 पर आधारित यह एक पुराना सवाल है, लेकिन मैं रेल में 4.0.4 पर काम कर रहा हूं। तो सोचा कि मैं यह कैसे इस संस्करण के साथ इस समस्या का सामना करने के लिए किसी के लिए निर्धारित में पिच करना चाहते हैं। आपका माइलेज भिन्न हो सकता है लेकिन यहाँ मेरे लिए क्या काम किया है

सबसे पहले सुनिश्चित करें कि आपके पास रत्न स्थापित हैं और बंडल इंस्टॉल करें।

 gem 'jquery-rails' gem 'turbolinks' gem 'jquery-turbolinks' 

Application.js में जांचें कि सब कुछ नीचे की तरह आवश्यक है

अगर यह मिला है तो सावधान रहें : यह //= require jquery.turbolinks और नहीं //= require jquery-turbolinks

 //= require jquery //= require jquery_ujs //= require jquery.turbolinks //= require turbolinks //= require_tree . 

इसके बाद, application.html.erb के शीर्ष लेख में उचित लिंक जोड़ें।

 <%= javascript_include_tag "application", "data-turbolinks-track" => true %> <%= javascript_include_tag :defaults %> 

मैं जिस पद्धति को हटाना है, उसे लागू करने के तरीके पर कई बदलाव होने लगते हैं, आपके द्वारा उपयोग किए जा रहे पटरियों के संस्करण पर निर्भर करता है। यह मैंने इस्तेमाल किया delete सिंटैक्स है

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

उम्मीद है कि इस बहुत निराशाजनक छेद से किसी को खोदने में मदद करता है!