2012-02-16 27 views
5

मैं अपने application.html.erb के शीर्षलेख में लॉगिन (उपयोगकर्ता नाम/पासवर्ड) शामिल करने का प्रयास कर रहा हूं।रेल 3 अन्य नियंत्रक से आंशिक प्रस्तुत करते हैं (त्रुटि: एक्शन व्यू :: मिसिंग टेम्पलेट)

Missing partial /login with {:handlers=>[:rjs, :builder, :rhtml, :erb, :rxml], :locale=>[:en, :en], :formats=>[:html]} in view paths "/app/views" 

यह जब मैं अपने application.html.erb में यह कॉल करने के लिए हो रहा है: मैं यह त्रुटि हो रही है

<%= render '/login' %> 

'/ लॉगिन' के रूप में मेरी routes.rb में परिभाषित किया गया है:

match '/login' => "sessions#new", :as => "login" 

अद्यतन:

class SessionsController < ApplicationController 

    def create 
    if user = User.authenticate(params[:email], params[:password]) 
     session[:user_id] = user.id 
     user.last_login = Time.now 
     user.save 
     redirect_to root_path, :notice => "login successful" 
     else 
     flash.now[:alert] = "invalid login/password combination " # don't show pass + params[:password] 
     #render :action => "new" 
     redirect_to login_path, :notice => "wrong user pass" 
     end 
    end 

    def destroy 
    reset_session 
     redirect_to root_path, :notice => "successfully logged out" 
    end 

end 
: यहाँ मेरी सत्र नियंत्रक है 10

मैंने अन्य पोस्ट में देखा है कि यह एक नियंत्रक कार्रवाई में चर को परिभाषित नहीं करने के कारण हो सकता है, लेकिन चूंकि यह एक सत्र है, और यह application.html.erb (application_controller.rb) में है, मैं नहीं हूं सुनिश्चित करें कि यह कैसे करें। क्या किसी को पता है कि इसे कैसे करते हैं? धन्यवाद!

+0

आपकी आंशिक रूप से स्थित कहां स्थित है? और, आप अपने प्रस्तुत करने में मार्ग पथ क्यों निर्दिष्ट कर रहे हैं? – prasvin

+0

आंशिक विचार/सत्र/new.html.erb में है। रेंडर करने के लिए मेरे कॉल में '/ login' का उपयोग करने का कारण यह है कि मुझे लगा कि यह विचार/सत्र/new.html.erb आंशिक प्रस्तुत करेगा। – botbot

+0

अद्यतन उत्तर – prasvin

उत्तर

9

<%= render "sessions/login", :@user => User.new %>

लॉगिन सत्र का आंशिक देखने, यानी '_login.html.erb के विचारों/सत्र में प्रस्तुत करना और नए उपयोगकर्ता को @user का दृष्टांत इतना है कि यह रूप में आंशिक सीधे संदर्भित किया जा सकता होगा:

form_for @user, :url => sessions_path do |f| 
    f.text_field :email 
+0

देखें मैंने अपने सत्र नियंत्रक कोड को दिखाने के लिए अपनी पोस्ट अपडेट की। मैं इस पर नया हूं, इसलिए मैं वास्तव में समझ में नहीं आता कि मुझे एक साथ क्यों जाना होगा: @user => user.new? क्या यह लाइन है: यदि उपयोगकर्ता = उपयोगकर्ता। प्रमाणीकरण (पैराम्स [: ईमेल], पैराम्स [: पासवर्ड]) सत्र नियंत्रक में विफल नहीं होगा? मैं एक ट्यूटोरियल का अनुसरण कर रहा था जहां मुझे अपने/सत्र फ़ोल्डर में new.html.erb जोड़ना पड़ा, लेकिन अब जब मैं अपने नियंत्रक को देखता हूं, तो इसमें केवल एक निर्माण और एक विचलन विधि है। थोड़ी उलझन में। – botbot

+0

यदि आप इसके साथ कुछ प्रकार की प्रमाणीकरण प्रणाली बनाने की कोशिश कर रहे हैं, तो मैं वास्तव में डेविस मणि https://github.com/plataformatec/devise का उपयोग करने की सलाह देता हूं। यह बहुत आसान और बहुत उपयोगी है। यह स्वयं सत्र बनाता है, उपयोगी सहायक (जैसे current_user) प्रदान करता है और हमें सत्र परेशानी के प्रबंधन से मुक्त करता है। मैं बजाय देवता को प्रमाणीकरण करने वाला हिस्सा छोड़ दूंगा। इस तरह यदि उपयोगकर्ता प्रमाणीकृत नहीं है, तो Devise इसे साइन इन पेज पर रीडायरेक्ट करेगा। अब, आप जिस भी चाहें साइन इन पेज को डिज़ाइन कर सकते हैं और लॉगिन (उपयोगकर्ता नाम/पासवर्ड) जहां भी चाहें प्रस्तुत कर सकते हैं। – prasvin

+1

अब, सीधे आपके प्रश्न पर जाकर, मैं विचार/सत्रों में आंशिक '_login.html.erb' बनाने का सुझाव देता हूं। फिर, उपरोक्त के रूप में लॉगिन आंशिक प्रस्तुत करें। कारण '@ उपयोगकर्ता' पास किया गया है क्योंकि आंशिक के पास '@ उपयोगकर्ता' के लिए एक फॉर्म है, इसलिए इसे 'user.new' के साथ तत्काल किया गया है। ऊपर दिखाए गए अनुसार उपयोगकर्ता के लिए आंशिक रूप से आंशिक रूप से पॉप्युलेट करें, जिसमें ईमेल, पासवर्ड और यदि आवश्यक हो, तो कुछ अन्य फ़ील्ड शामिल हैं। जब फॉर्म सबमिट किया जाता है तो पैराम्स सत्रों में पास किए जाते हैं # फॉर्म में उल्लिखित यूआरएल का बीकोज़ बनाएं। कोड अवांछित है, लेकिन मदद करनी चाहिए। लेकिन, कृपया पहले डेविस पर एक नज़र डालें और इसका उपयोग करें यदि यह आपकी आवश्यकताओं को फिट करता है। – prasvin

0

मेरे मामले फाइल एक्सटेंशन में अपने फाइल एक्सटेंशन की जाँच करें rhtml था, मैं यह html.erb में बदल दिया है।

अब यह ठीक काम कर रहा है।

नोट:

साथ rhtml विस्तार इस फ़ाइल रेल < = 3.0.10 में ठीक काम कर रहा था। लेकिन रेल में काम करना बंद कर दिया 3.1.12। इसलिए मैंने ऊपर बताए अनुसार अपना विस्तार बदल दिया।