2009-07-12 18 views
5

मुझे सत्र चर का उपयोग करने में समस्या है। मेरे पास 'स्नातक_स्टुडेंट्स_कंट्रोलर' और 'current_students_controller' नामक दो नियंत्रक हैं। इनमें से प्रत्येक नियंत्रक विभिन्न दृश्य फ़ाइलों को नियंत्रित करता है। मैं सत्र नियंत्रकों को संग्रहीत करने के लिए इन दोनों नियंत्रकों के साथ सत्र चर का उपयोग कर रहा हूं।रेल: आप एकाधिक नियंत्रकों का उपयोग कर सत्र चर का उपयोग कैसे कर सकते हैं?

यहां समस्या है। आइए मान लें कि मेरे पास उपर्युक्त नियंत्रकों द्वारा अलग-अलग नियंत्रित प्रत्येक रिपोर्ट फ़ाइलों की रिपोर्ट/current_students_list ',' रिपोर्ट/स्नातक_स्टुडेंट्स_लिस्ट 'है।

अब यदि मैं उन दो वेब पृष्ठों को एक ही ब्राउज़र में खोलने का प्रयास करता हूं और साथ ही साथ उनके साथ काम करने का प्रयास करता हूं, तो मुझे पहले लोड किए गए पृष्ठ से 'शून्य ऑब्जेक्ट एक्सेस' त्रुटि मिलती है। 'शून्य ऑब्जेक्ट' एक सत्र चर को संदर्भित करता है जिसे पहले पृष्ठ तक पहुंचने के लिए माना जाता है। हालांकि, जब मैं उन दो वेब अनुप्रयोगों में से किसी एक का व्यक्तिगत रूप से उपयोग करता हूं, तो वे ठीक काम करते हैं।

तो ऐसा लगता है कि पहले लोड किए गए वेब ऐप के सत्र चर। दूसरे लोड किए गए वेब ऐप द्वारा अधिलेखित हो रहे हैं। शायद क्योंकि दूसरा पृष्ठ पहली बार एक नई कुकी स्टोर करता है?

मैं इसे कैसे ठीक करूं?

कोई सुझाव बहुत सराहना की है।

थोड़ा और स्पष्टीकरण के लिए: दो नियंत्रक एक ही रेल एप्लिकेशन से संबंधित हैं। और मैं दोनों नियंत्रकों के भीतर समान सत्र चर नामों का उपयोग नहीं कर रहा हूं। इसलिए मैं नहीं देख सकता कि वे

मैं रेल के लिए नया हूं और मैं वास्तव में इस समस्या के साथ कुछ मदद की सराहना करता हूं। धन्यवाद।

+0

रेल के किस संस्करण के साथ आप काम कर रहे हैं? साथ ही, क्या ये नियंत्रक एक ही रेल ऐप में हैं, या अलग-अलग ऐप्स में हैं? –

+0

हाय जॉन, मैं रेल संस्करण का उपयोग कर रहा हूँ 2.2.2 है। और मेरे पर्यावरण में निर्दिष्ट मेरे रत्न संस्करण इस प्रकार है: ----------- # विक्रेताओं/रेल मौजूद नहीं होने पर रेल का मणि संस्करण निर्दिष्ट करता है RAILS_GEM_VERSION = '1.2.3 'जब तक परिभाषित नहीं किया? RAILS_GEM_VERSION --------------- (इस समय मैं अपनी स्थानीय मशीन पर किसी भी नए संस्करण का उपयोग नहीं कर रहा हूं क्योंकि ये हमारे उत्पादन सर्वर पर वर्तमान सेटिंग्स हैं। और मैं अपने परीक्षण करना चाहता हूं उनके अनुसार ऐप्स) हाँ, इन नियंत्रकों और फ़ाइलों को एक ही रेल ऐप से संबंधित हैं। तो क्या कोई विचार यह मुद्दा पैदा कर रहा है? धन्यवाद जॉन – Vicer

+0

बस इसे स्पष्ट करने के लिए, सत्र परिवर्तक जो इन दो नियंत्रकों तक पहुंच रहे हैं, उनके पास आम नाम नहीं हैं।इसलिए सत्र चर को ओवरराइट करने का कोई कारण नहीं है जब तक कि दूसरा लोड किया गया वेब पेज मौजूदा एक पर एक नई कुकी संग्रहीत नहीं कर रहा है (जिसे पहले लोड किया गया पृष्ठ संग्रहीत किया गया है)? यह एकमात्र तार्किक कारण है जिसके बारे में मैं सोच सकता हूं। लेकिन आप इस तरह कुछ कैसे ठीक कर सकते हैं? किसी को भी इसी तरह की स्थिति का सामना करना पड़ा? – Vicer

उत्तर

4

मुझे यकीन नहीं है कि आप दो ऐप्स चला रहे हैं, या एक ही ऐप के तहत दो नियंत्रकों का जिक्र कर रहे हैं। यदि आप अलग-अलग वेब ऐप्स देख रहे हैं, तो मुझे लगता है कि आप इन ऐप्स में से प्रत्येक के लिए अपने पर्यावरण में समान नाम और सत्र कुंजी का उपयोग कर रहे हैं। अपने environment.rb में महत्वपूर्ण मूल्य बदलने का प्रयास करें: आप एक ही आवेदन में दो अलग-अलग नियंत्रकों से एक ही सत्र चर का उपयोग कर रहे हैं, तो

config.action_controller.session = { :key => "_myapp_session", :secret => "..." } 

, तो आप इस समायोजित करने के लिए अपने कोड लिखने के लिए, हालांकि मैं की आवश्यकता होगी ऐसा करने की सिफारिश नहीं करेंगे। जब आपका सत्र डेटा तक पहुँचने, शून्य मान के लिए जाँच:

session[:some_key].nil? 

और यह सुनिश्चित करें कि आम कोड (अर्थात application_controller.rb में) अपने मूल्यों को अधिलेखित नहीं कर रहा है।

+0

हाय मैट, मैं एक ही आवेदन में दो नियंत्रकों का जिक्र कर रहा हूं। जब आप "समान सत्र चर" कहते हैं, तो क्या आप दोनों नियंत्रकों द्वारा उपयोग किए जाने वाले समान सत्र चर नामों का जिक्र कर रहे हैं? नहीं, मैं ऐसा नहीं कर रहा हूं, दो नियंत्रक अपने सत्र चर के लिए अलग-अलग नामों का उपयोग कर रहे हैं। मैंने अपने आवेदन को देखा था। आरबी और मुझे यकीन है कि मुझे यह मिला: सत्र: session_key => '_StudDab_session_id' तो मुझे लगता है कि यह समस्या है? हर बार जब मैं एक नया पेज लोड करता हूं तो वर्तमान सत्र ओवरराइट हो जाता है? क्या मैं इसे दो नियंत्रकों में से प्रत्येक के अंदर अद्वितीय सत्र कुंजी निर्दिष्ट करके ठीक कर सकता हूं? – Vicer

+0

नहीं - सत्र कुंजी को प्रत्येक ऐप के लिए अद्वितीय होना चाहिए, न कि उसी एप्लिकेशन में नियंत्रक। मुझे लगता है कि आपके ऐप में कहीं भी एक बग है जो या तो आपके सत्र में मूल्य को साफ़ कर रहा है। मैं आपके नियंत्रक कार्रवाई के शीर्ष पर सत्र चर के मान को लॉगिंग करने की अनुशंसा करता हूं, फिर अंत में उन्हें फिर से लॉगिंग करता हूं। देखें कि क्या वे बदलते हैं, और वहां से वापस पता लगाते हैं। – Codebeef

+0

हाय मैट सत्र कुंजी बदलने से समस्या ठीक हो गई। मैं जांच करने और इसका कारण बनने का प्रयास करूंगा। यह काफी निराशाजनक जांच है। आपके सुझाव मैट के लिए धन्यवाद। – Vicer

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

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