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


386

मैंने अपने ऐप पर डेविस इंस्टॉल किया है और अपनी 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पुष्टि की कि सभी मार्ग वैध हैं।

इसके अलावा, मेरी routes.rbफ़ाइल में मेरे पास devise_for :usersऔर है root :to => "home#index"

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

No route matches "/users/sign_out"

किसी भी विचार क्या त्रुटि का कारण है?


1
मार्गों को जोड़ने के बाद क्या आपने अपना ऐप पुनः आरंभ किया? रूट परिवर्तन केवल स्टार्टअप पर प्रभावी हो जाते हैं।
थिलो-एलेक्जेंडर जिंकेल

2
हाँ। बस फिर से सुरक्षित होना था। इसके अलावा, मैंने स्टैक पर कहीं और पढ़ा है कि यह नवीनतम डेविस रत्न के साथ एक समस्या हो सकती है जो रेल 3.0.3 के साथ संगत नहीं है इसलिए मैंने 1.4.2 से अपने डेविस रत्न को बदलने की कोशिश की gem 'devise', :git => 'git://github.com/plataformatec/devise.git'। हालांकि यह कुछ नहीं किया।
vich

जेमफाइल में एंट्री नहीं बदलने से आपको डेविस का नया संस्करण मिलेगा? क्या आपने एक कम संस्करण संख्या निर्दिष्ट करने की कोशिश की है?
सिंह कासरानी

क्या आप अपने मार्गों को पोस्ट कर सकते हैं। आरबी फ़ाइल
felix

1
नीचे जेसी द्वारा दूसरा जवाब पूरी तरह से काम किया।
vich

जवाबों:


568

मुझे लगता है कि हस्ताक्षर करने का मार्ग एक DELETEतरीका है। इसका मतलब है कि आपके साइन आउट लिंक को इस तरह देखना होगा:

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

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


3
मैं सुरक्षित रूप से कह सकता हूं कि मुझे अपने किसी भी रेल एप्लिकेशन में ऐसा कभी नहीं करना पड़ा। link_to "Sign out", destroy_user_session_pathहमेशा मेरे लिए काफी अच्छा रहा है।
सिंह कैसरानी

8
मैंने परीक्षण किया और यह मेरे लिए काम करता है। यह मत भूलो कि चीजें एक संस्करण से दूसरे संस्करण में बदल जाती हैं (रेल या डेविस में)। इसके अलावा, लॉग आउट करना राज्य-बदलते व्यवहार है जो कि जीईटी विधियों (मेरी विनम्र राय में) का उपयोग करके नहीं किया जाना चाहिए।
जेसी डेडेकर

23
अधिक जानकारी के लिए, डेविस के नवीनतम संस्करण में इसे क्यों बदल दिया गया था, यहां और यहां वर्णित है
जेसी डेडेकर

6
मैं इसी मुद्दे पर भागा और जेसी के सुझाव ने मेरे लिए काम किया। मैं उम्मीद करता हूं कि जो कोई भी इस बदलाव के कारण अंतिम रूप से समाप्त हो रहा है,
डेवले रेलसेक के

2
यदि आप $("<a href='/users/sign_out' data-method='delete'>Sign out</a>").appendTo('body');पेज पर jQuery लोड है, तो आप इसे अपने वेब कंसोल में टाइप कर सकते हैं ।

133

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

config.sign_out_via = :delete

सेवा

config.sign_out_via = :get

और यह मेरे लिए काम करने लगा।


22
जिस तरह से पहले किया गया था वह "जीईटी / उपयोगकर्ताओं / साइन_आउट" का उपयोग करके साइन आउट करने के लिए था, लेकिन उन्होंने इसे "अधिक" बनाने के लिए इसे "DELETE" में बदल दिया। लेखक ने समझाया कि GET को सर्वर से परिवर्तन नहीं करना चाहिए जैसे कि लॉग आउट करना।
जोनाथन एलार्ड

2
यह मेरे लिए काम किया। जबकि मैं इसकी सराहना करता हूं कि यह एक सर्वोत्तम अभ्यास नहीं है, अन्य उत्तर विफल रहे। मैं क्यों नहीं देख सकता हूँ !!
माइल्ड फज

8
यदि आप कई विधियों का समर्थन करना चाहते हैं, तो एक सरणी का उपयोग करना भी संभव है। उदाहरण के लिए: config.sign_out_via = [ :post, :delete ]या devise_for :users, :sign_out_via => [ :post, :delete ], जैसा कि डेविस / रेल / मार्गों में वर्णित है ।
होसम ऐली

2
मैं साइन आउट करने के लिए एक GET अनुरोध का उपयोग नहीं करूंगा क्योंकि यह उपयोगकर्ता को एक XSRF हमले तक खोलता है। (हैकर src = " foo.com/users/sign_out " के साथ एक छवि टैग के साथ एक वेबसाइट बनाता है , उपयोगकर्ता इसे देखता है और लॉग आउट किया जाता है)।
रयान डोहर्टी

1
@RyanDoherty Id मैं गलत नहीं हूँ, XSRF अभी भी संभव है (हमलावर को लक्ष्य url पर कार्रवाई = "DELETE" के साथ एक फ़ॉर्म का उपयोग करना है, फिर पृष्ठ लोड पर इसे ऑटो सबमिट करें)।
माएल नाइसन

60

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

rails generate jquery:install

आपके पास और अधिक rails.js फ़ाइल नहीं होनी चाहिए । यदि आप करते हैं, तो आप शायद आउट-ऑफ-डेट हैं। यह भी सुनिश्चित करें कि यह फाइल डिफॉल्ट / एप्लीकेशन.बीआर में डिफॉल्ट से भरी हुई है

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

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

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

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


8
मेरे पास मेरे लिंक_ में विधि => 'डिलीट' था, समस्या jquery_ujs शामिल नहीं थी, इस समाधान से मेरी समस्या हल हो गई। याद रखें कि रत्न 'jquery-rails' को अपने रत्न में रखें।
रोब बाज़िनेट

2
धन्यवाद यह मेरे लिए काम किया। डिफॉल्ट का उपयोग करने के बजाय आप उपयोग भी कर सकते हैंjavascript_include_tag "jquery_ujs"
Bnicholas

अच्छी पकड़ है, धन्यवाद! मैं asynchronously फ़ाइलों को लोड करने के लिए requ.js का उपयोग कर रहा हूं और jquery_ujs की आवश्यकता भूल गया।
दान फिराइज़ल

मुझे लगता है कि "यू" असम्पीडित था और इस लाइन को हटा दिया application.js। बुरी धारणा है, मुझे लगता है। धन्यवाद।
जेफ़

यह समस्या (मेरे 100 वें डेविस आधारित ऐप में) कम से कम sass से ट्विटर बूटस्ट्रैप को बदलने के बाद और मैं अपने एप्लिकेशन में jquery_ujs को वापस जोड़ना भूल गया।
जो

31

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

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

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

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

Link_to से button_to में परिवर्तन ने मेरे लिए काम किया, लेकिन मैं वास्तव में नहीं समझता कि क्यों? Html / css से अलग क्या बदला?
Spyros Mandekis

1
यह रेल 'जादू' के साथ करना है कि ऑटो html को बटन_टो और लिंक_टो जैसे कार्यों से उत्पन्न करता है। यह सिर्फ इतना होता है कि बटन_ बटन के लिए रेल जादू उचित रेस्टलेट DELETE कॉल निर्दिष्ट करता है और लिंक_टो नहीं करता है। अगर मुझे अनुमान लगाना था, तो मैं कहूंगा कि इसका कारण यह है कि HTML बटन तत्व एक लिंक को डिलीट कर सकते हैं (या एक्शन को निर्दिष्ट करने वाले एक छिपे हुए क्षेत्र के साथ बंडल) जबकि नियमित लिंक नहीं कर सकते।
विल नाथन

इसके लिए धन्यवाद। मैंने अपने ऐप को मैन्युअल रूप से jquery को संभालने के लिए सेटअप किया है, इसलिए मेरे पास jquery-ujs नहीं थे। बोवर या बंडलर के साथ स्थापित करना और परिसंपत्ति पाइपलाइन के लिए उपयुक्त लाइन सहित समस्या को ठीक करता है।
jhhorn424

1
यह मुझे सबसे सुरक्षित और सबसे पोर्टेबल समाधान लगता है।

के बारे में button_to, रेल formपूरी कार्रवाई के लिए उत्पन्न करता है । यही कारण है कि इसके :deleteसाथ विधि का उपयोग करना संभव है button_toऔर नहीं link_to, बस उत्पन्न HTML देखें।
फर्नांडो फैब्रेटी

25

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

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

राय:

<%= link_to "Logout", logout_path %>

Mmichael के समान त्रुटि हो रही है। यह उपरोक्त परीक्षण मेरे लिए काम करता है।
rtfminc

1
मुझे भी mmichael जैसी त्रुटि हुई। उपरोक्त समाधान काम करेगा लेकिन यह तय नहीं है कि इसे कैसे तय किया जाना चाहिए। डेविस में डिफ़ॉल्ट मार्गों में पहले से ही साइन आउट मार्ग को DELETE विधि के रूप में शामिल किया गया है। आपको सामान्य रूप से स्वयं डिफ़ॉल्ट मार्गों को बदलने की आवश्यकता नहीं होनी चाहिए। इसलिए आप इसे link_toकॉल में एक अलग पैरामीटर जोड़कर ठीक कर सकते हैं , जैसा कि अन्य उत्तर में वर्णित है।
जेसी डेडेकर

आपको एक रूट जोड़ने की ज़रूरत नहीं है। आर.बी. फाईल, डिवाइज़ आपको devise.rb में विधि बदलने देता है जो कि / confit / initializers / directory में है।
ट्रैविस पेसेटो

6
कभी भी GET के रूप में लॉगआउट पथ नहीं है।
जगिरा

@ जागिरा क्यों? DELETE और GET दोनों क्यों नहीं?
hrdwdmrbl


13

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

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

अगर bower try का उपयोग किया जाए तो // = jquery-ujs की आवश्यकता होती है।
monteirobrena

10

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

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

परिवर्तन:

:delete

... सेवा:

'delete'

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

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

इस कोड स्निपेट को पोस्ट करने के लिए आपका धन्यवाद, मेरे लिए अब साइन_आउट काम करता है।
buk

9

सवाल के कई जवाब पहले से ही। मेरे लिए समस्या दो गुना थी:

  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 को हटा दूंगा। खराब चुनाव। डेविस jQuery को "नकली" DELETE अनुरोध का उपयोग कर रहा है और इसे GET के रूप में भेज रहा है। इसलिए आपको इसकी आवश्यकता है:

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

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

क्या आप तीसरे बिंदु की व्याख्या कर सकते हैं..मैं इसका शिकार था और मैं इसे और अधिक समझना चाहता हूं
राहुल डेस

1
निश्चित रूप से। आपकी वेबसाइट वास्तव में कोई DELETE अनुरोध नहीं भेज रही है। काफी स्पष्ट रूप से यह केवल GET और POST का उपयोग करेगा। क्योंकि रेल समुदाय में यह सहमति व्यक्त की गई है कि (अच्छे कारणों के लिए) हम DELETE अनुरोध सबमिट करते समय रिकॉर्ड हटाना चाहते हैं, हमें थोड़ी चाल का उपयोग करने की आवश्यकता है। जब आपके ईआरबी में आप विधि निर्दिष्ट करते हैं:: डिलीट रेल्स उसे HTML5 टैग में बदल देगा: डेटा-विधि = "हटाएं" और इसे जीईटी के रूप में सबमिट करें। अब, यह वह जगह है जहाँ jQuery- ujs और jQuery में किक करते हैं। वे एप्लिकेशन को यह पहचानने की अनुमति देते हैं कि आप क्या कर रहे हैं। ताकि आपके अनुरोध को नियंत्रक कार्रवाई के साथ मिलान किया जा सके।
लुकाज़ मुज़ेका

उन रत्नों के बिना, यह काम नहीं करेगा। बेशक, आप डेविस की सेटिंग्स बदल सकते हैं (इनिशियल इनिशियलाइज़र में) और इसे DELETE के बजाय GET का उपयोग करने के लिए कहें।
लुकाज़ मुज़ेका

7

जोड़ें:

  <%= 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

7

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

config.sign_out_via = :get

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


केवल इस जवाब ने मेरे लिए डेविस 3.5.1 और रेल्स 4.2.3 के लिए काम किया
सागर जुनकर

सर्वर पुनः आरंभ न भूलें :)
जैकमिन

6

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

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

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

<%= javascript_include_tag 'application' %>

मेरा अनुमान है कि कुछ रत्न default.js स्थान की नई संरचना को ओवरराइट कर देते हैं।


धन्यवाद! यह मुझे पागल कर रहा था!
डोरियन

5

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

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

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

5

खैर, मेरे लिए दोस्तों यह केवल: विधि =>: हटाना था

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

5

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

rails generate devise:install

पहला विकल्प:

इसका मतलब है कि या तो आपको निम्नलिखित लाइन को बदलना होगा /config/initializers/devise.rb

config.sign_out_via =: config.sign_out_via =: get को हटाएं

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

आप केवल इस लाइन <%= link_to "Sign out", destroy_user_session_path %>को बदल सकते हैं<%= link_to "Sign out", destroy_user_session_path, :method => :delete %> दृश्य फ़ाइल पर ।

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


5

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

"sign_out" लिंक काम नहीं किया, होने के बावजूद: विधि =>: हटाएं।

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

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

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


5

अधिकांश उत्तर आंशिक हैं। मैंने इस मुद्दे को कई बार मारा है। दो बातों पर ध्यान देने की आवश्यकता है:

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

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

फिर वसीयत में jquery का उपयोग होता है, इसलिए आपको उन लोड करने की आवश्यकता होती है

   <%= javascript_include_tag "myDirectiveJSfile" %> 

और सुनिश्चित करें कि बीओटीएच jquery और jquery-ujs आपके myDirectiveJSfile.ds में निर्दिष्ट हैं

//= require jquery
//= require jquery_ujs

5

अपने आवेदन में निम्नलिखित पंक्ति को शामिल करना न भूलें। (नियम 3)

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

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


4

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

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

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


3

समस्या 3.1 के साथ शुरू होती है ... /app/assets/javascript/बस application.js के लिए देखो।

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

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


3

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

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

या उचित साइन_आउट विधि के साथ devise.rb को कॉन्फ़िगर करें

Devise.rb में

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

3

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

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

नोट: इसमें devise_for होना चाहिए: उपयोगकर्ताओं को इससे अलग घोषित किया गया। dipole_moment से उत्तर देखें।
तयल वेब साइट्स

2

अपने मार्गों में:

 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

और आपके आवेदन में। html:

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

1
सिंटैक्स अब है: devise_for: उपयोगकर्ताओं को तो डेविस_स्कोप में डाल दिया जाना चाहिए: उपयोगकर्ता ध्यान दें: एकवचन: devise_scope के लिए उपयोगकर्ता
Taylored वेब साइटें

2

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

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

1

यह देखें कि क्या आपके मार्गों.rb में "devise_for: उपयोगकर्ता" से पहले "संसाधन: उपयोगकर्ता" हैं, तो उन्हें स्वैप करने का प्रयास करें:

  1. काम करता है

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

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

1

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


1

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

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

gem 'jquery-rails'

gem 'turbolinks'

gem 'jquery-turbolinks'

Application.js में देखें कि सब कुछ नीचे की तरह जरूरी है।

अगर यह gotcha : खबरदार : यह //= 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>

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


0

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

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.