2013-08-22 6 views
7

मैंने अभी अपने ऐप पर डेविस स्थापित किया है, मैंने पहले इसे माइकल हार्टल ट्यूटोरियल की तरह खरोंच से किया था।कोई रूट मैचों [POST] "/ सत्र/उपयोगकर्ता"

वर्तमान में मैं साइन अप कर सकता हूं और लॉग आउट कर सकता हूं। लेकिन यह में प्रवेश करें जब मैं एक त्रुटि देता है:

No route matches [POST] "/sessions/user"

यह होता है जब मैं के साथ या (सही) पासवर्ड के बिना बटन में/लॉग में संकेत पर क्लिक करें।

मेरे मार्ग फ़ाइल है:

SampleApp::Application.routes.draw do 
devise_for :users, path_names: { sign_in: "login", sign_out: "logout"} 

resources :users do 
    resources :bookings, only: [:show] 
    end 
resources :bookings 
resources :sessions 

# match '/signup', to: 'devise/registrations#new', via: :get 
# match '/signin', to: 'devise/sessions#new', via: [:post, :get] 
# match '/signout', to: 'devise/sessions#destroy', via: :delete 
match '/admin', to: 'admin#new', via: :get 
match "bookings/new", to: 'bookings#new', via: [:post, :get] 

devise_scope :user do 
    root to: 'static_pages#home' 
end 

[संपादित करें]

मेरे प्रपत्र वसीयत से डिफ़ॉल्ट है:

<h2>Sign in</h2> 

<%= form_for(resource, :as => resource_name, :url => session_path(resource_name)) do |f| %> 
    <div><%= f.label :email %><br /> 
    <%= f.email_field :email, :autofocus => true %></div> 
    <div><%= f.label :password %><br /> 
    <%= f.password_field :password %></div> 
    <% if devise_mapping.rememberable? -%> 
    <div><%= f.check_box :remember_me %> 
    <%= f.label :remember_me %></div> 
    <% end -%> 
    <div><%= f.submit "Sign in" %></div> 
<% end %> 

वर्तमान में मैं सत्र पर कोई कोड नहीं है माइकल हार्टल ट्यूटोरियल में नियंत्रक और न ही हेल्पर की तरह

मेरे रेक सत्र के बारे में मार्गों इस प्रकार हैं:

  sessions GET  /sessions(.:format)     sessions#index 
        POST  /sessions(.:format)     sessions#create 
     new_session GET  /sessions/new(.:format)    sessions#new 
     edit_session GET  /sessions/:id/edit(.:format)   sessions#edit 
      session GET  /sessions/:id(.:format)    sessions#show 
        PATCH /sessions/:id(.:format)    sessions#update 
        PUT  /sessions/:id(.:format)    sessions#update 
        DELETE /sessions/:id(.:format)    sessions#destroy 

[हल]

मैं मार्गों अद्यतन फ़ाइल

devise_scope :user do 
    root to: 'static_pages#home' 
    match '/sessions/user', to: 'devise/sessions#create', via: :post 
    end 
+0

मैं अपनी फार्म और इसी नियंत्रक विधि देख सकते हैं? – godzilla3000

+0

मैंने फ़ॉर्म को शामिल करने के लिए फ़ाइल को संपादित किया है, लेकिन यह डिवीज डिफ़ॉल्ट रूप है। मेरे सत्र नियंत्रक के पास वर्तमान में कोई कोड नहीं है – tvieira

+1

@TiagoOrnelasVieira मुझे खुशी है कि आप अपनी समस्या का समाधान करने में सक्षम थे। यदि आप या तो उस समाधान को स्वीकार कर सकते हैं जिसने आपको जवाब दिया है या जो जवाब आपने स्वयं पाया है उसे सबमिट कर दें और इसे चेक दें, यह आपके प्रश्न को देखने में मदद करेगा। यदि आपको वास्तव में यह नहीं पता कि आपका समाधान क्यों काम करता है तो हमें कैसे पूछें और शायद कोई स्पष्टीकरण देगा कि आपके समाधान ने आपकी समस्या क्यों तय की है। एक बार जब आप या किसी ने पूरी तरह से प्रश्न का उत्तर दिया है तो कृपया इसे चेक मार्क दें ताकि यह बंद हो जाए और इसलिए स्टैक ओवरफ़्लो को साफ और संक्षिप्त रखा जाएगा। धन्यवाद। – DutGRIFF

उत्तर

9

निर्देशन किया जाना चाहिए मार्गों फ़ाइल में निम्नलिखित पंक्तियां जोड़ें > बाद के संस्करणों

में एक संघर्ष का कारण बनता है -

post ':controller(/:action(/:id(.:format)))' 
get ':controller(/:action(/:id(.:format)))' 

इसके अलावा match ':controller(/:action(/:id(.:format)))' को दूर

+0

इससे समस्या हल हो सकती है लेकिन क्या आप इसे समझा सकते हैं कि यह वास्तव में क्या है। मुझे लगता है कि यह मैच के समान ही काम करता है। मैं रेल 4.0.0+ में जानता हूं कि आप 'match' का उपयोग बिना 'के:': get:: post] ',' के माध्यम से कर सकते हैं:: all' या 'through:' इसके अलावा जो कुछ भी है, मैं नहीं करता देखें कि यह कैसे मदद करता है। यह भी हर नियंत्रक के लिए यह कर रहा है? तो क्या इससे बाद में समस्याएं हो सकती हैं? –

+0

मुझे सच में नहीं पता कि मैच मेरे लिए क्यों काम नहीं करता है, लेकिन जब मैंने इसे रूट फाइल में बदल दिया और परिभाषाओं को अलग-अलग पोस्ट किया, तो यह काम करना प्रतीत होता था। यह सटीक समाधान नहीं हो सकता है, इससे बाद में समस्याएं हो सकती हैं (कोई भी जो मैंने पार नहीं किया है) लेकिन अगर आप राक रूट संघर्ष पृष्ठ पॉप अप करते हैं तो मैन्युअल रूप से मार्ग परिभाषाएं लिखते हैं, तो यह आपकी मदद करता है। –

+0

आप आदमी टॉमी हैं .. –

0

sessions/new ध्यान में रखते हुए कड़ी आप में शामिल किया है की जाँच साइन-इन बटन। यह संभव है कि :user के बजाय आपके पास user है या गलत पथ पर जाने वाला एक समान टाइपो है। $ rake routes के आउटपुट को भी देखें - क्या साइन-इन बटन मौजूद पथ पर इंगित करता है? क्या आपने routes.rb में कुछ नामित मार्ग बनाए हैं?

हार्टल ट्यूटोरियल में, यदि आप डिफ़ॉल्ट का पालन किया है, जब आप इसे में प्रवेश करें आप से

sessions#newusers#show को (user_path)

+0

मैं इसे ठीक करता हूं। मैं – tvieira

+1

पोस्ट के माध्यम से तैयार/सत्र # के साथ सत्र/उपयोगकर्ता मार्ग से मेल खाता हूं, खुशी है कि आप इसे काम कर रहे हैं! – dax

5

सम्भावित समाधान मैं आए हैं:

devise_scope :user do 
    root to: 'static_pages#home' 
    match '/sessions/user', to: 'devise/sessions#create', via: :post 
    end 
+0

मैंने इस प्रश्न के समान समस्या को हल करने की कोशिश कर रहे युग व्यतीत किए हैं। इस समाधान ने मुझे किसी अन्य मॉडल को 'सत्र' नामक मौजूदा मॉडल का नाम बदलने से बचाया, जो कि इसे ठीक से ठीक करने का एकमात्र तरीका जैसा प्रतीत होता है ... शुक्र है कि यह नहीं था। – australis

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