रेल के लिए क्रेडिस का एक परिचय
<पी> क्रेडिस एक रेल्टी है जो तीन तरीकों से इसके उपयोग को सुव्यवस्थित करने के लिए सुविधाजनक रैपर प्रदान करता है:- रूबी-एस्क एपीआई :उदाहरण के लिए, संग्रह प्रकार जैसे
Kredis.listयाKredis.setजितना संभव हो देशी रूबी प्रकार (और उनके संबंधित एपीआई) का अनुकरण करें। - टाइपिंग :विशेष रूप से संग्रह के लिए उपयोगी, क्रेडिस तत्वों को मानक डेटा प्रकारों (उदाहरण के लिए,
datetime) से टाइप कास्टिंग करने का काम संभाल सकता है। ,json). - एक्टिवरिकॉर्ड डीएसएल :संभवतः लाइब्रेरी की सबसे बड़ी संपत्ति, यह आपको किसी भी रेडिस डेटा संरचना को विशिष्ट मॉडल उदाहरण के साथ आसानी से कनेक्ट करने की अनुमति देती है। .
- एक्टिवरिकॉर्ड :ज्यादातर मामलों में, इसके लिए एक कॉलम जोड़ने या अन्यथा आपके डेटा मॉडल को पैच करने की आवश्यकता होती है। माइग्रेशन की आवश्यकता है, साथ ही पुराने रिकॉर्ड की वैकल्पिक बैकफ़िलिंग भी।
- सत्र :प्रत्येक रेल ऐप का डिफ़ॉल्ट कुंजी/मूल्य स्टोर और इसके लिए कोई या बहुत कम सेटअप की आवश्यकता होती है। नकारात्मक पक्ष यह है कि इसमें संग्रहीत डेटा लॉगिन/लॉगआउट चक्र से बच नहीं पाता है।
केस स्टडी:क्रेडिस का उपयोग करके एक संक्षिप्त/विस्तारित यूआई स्थिति को बनाए रखें और पुनर्स्थापित करें
<पी> क्रेडिस के लिए एक अच्छे उपयोग के मामले का एक विशिष्ट उदाहरण यूआई स्थिति को बनाए रखना है, जैसे:- साइडबार खुला/बंद अवस्था
- वृक्ष दृश्य खुला/बंद अवस्था
- अकॉर्डियन ध्वस्त/विस्तारित अवस्था
- कस्टम डैशबोर्ड लेआउट
- डेटा तालिका की कितनी पंक्तियाँ प्रदर्शित करनी हैं
<details> की संक्षिप्त/विस्तारित स्थिति को कैसे प्रबंधित किया जाए तत्त्व. <पी> आइए एक ताज़ा रेल ऐप से शुरुआत करें, kredis जोड़ें बंडल में, और इसका इंस्टॉलर चलाएँ: <पी> ध्यान दें: यह config/redis/shared.yml में एक Redis कॉन्फ़िगरेशन फ़ाइल बनाएगा . <पी> इस लेख के शेष भाग के लिए, मैं मान लूंगा कि आपके पास स्थानीय रूप से चलने वाला Redis उदाहरण है। Homebrew के साथ macOS पर, इसे चलाना उतना ही आसान है: <पी> कृपया अपने ऑपरेटिंग सिस्टम पर Redis इंस्टॉल करने के तरीके के बारे में जानकारी के लिए आधिकारिक "गेटिंग स्टार्टेड" गाइड से परामर्श लें। उपयोगकर्ता प्रमाणीकरण
<पी> हमUser का उपयोग करने जा रहे हैं यूआई स्थिति जानकारी संग्रहीत करने के लिए इकाई के रूप में मॉडल। यहां बाइकशेडिंग से बचने के लिए, आइए हम डेविस द्वारा प्रदान की गई चीज़ों का उपयोग करें: <पी> फिर हम रेल्स कंसोल में एक उदाहरण उपयोगकर्ता बनाते हैं: हमारा उदाहरण ऐप:एक ऑनलाइन स्टोर
<पी> यह समझाने के लिए कि क्रेडिस एक जटिल वृक्ष संरचना की स्थिति को बनाए रखने में कैसे मदद कर सकता है, आइए मान लें कि हम एक ऑनलाइन डिपार्टमेंट स्टोर चला रहे हैं। इस प्रयोजन के लिए, हमDepartment को मचान बनाएंगे और Product मॉडल. हम दो-स्तरीय नेस्टेड संरचना बनाने के लिए एक विभाग से दूसरे विभाग में स्वयं शामिल होते हैं: <पी> बेशक, हमें अपने पेड़ की संरचना की जड़ों के लिए अशक्त माता-पिता को अनुमति देनी होगी: <पी> हमारा Department और Product मॉडलों को इस प्रकार परिभाषित किया गया है: <पी> अंत में, हम कुछ बीज डेटा उत्पन्न करने के लिए फ़कर का उपयोग करते हैं: स्टोरफ्रंट पर मचान बनाना
<पी> हम एक बहुत ही सरलHomeController बनाएंगे वह हमारी दुकान के स्टोरफ्रंट के रूप में कार्य करेगा। <पी> हम केवल उन विभागों को पुनः प्राप्त करने के लिए विभागों के बच्चों पर स्वयं शामिल होते हैं जिनमें वास्तव में उपविभाग हैं (या, दूसरे शब्दों में, हमारे पेड़ की जड़ें हैं): <पी> इंडेक्स व्यू में, हम <details> के दो स्तरों का उपयोग करके एक नेस्टेड ट्री व्यू सेट करते हैं हमारे विभागों के लिए तत्व: <पी> अभी हमारे पास जानबूझकर मूर्खतापूर्ण उत्पाद नामों वाले विभागों का एक ट्री व्यू है जिसे हम खोलकर और बंद करके देख सकते हैं: <पी>
<पी> हम अलग-अलग श्रेणियों की प्रकटीकरण स्थिति को जारी रखना चाहेंगे, जिसे हम आगे बढ़ाएंगे। क्रेडिस में श्रेणियों की सतत यूआई स्थिति
<पी> यहाँ हम चरण दर चरण क्या करने जा रहे हैं:- <पी> एक
kredis_setजोड़ेंopen_department_idsकहा जाता हैUserपर मॉडल. हम यहां एक सेट का उपयोग इसलिए कर रहे हैं क्योंकि यह डुप्लिकेट की अनुमति नहीं देता है, इसलिए हम अपने विभागों को सुरक्षित रूप से जोड़ और हटा सकते हैं। - <पी> एक
UIStateControllerबनाएं जिसे निम्नलिखित पैरामीटर प्राप्त होंगे:- द
department_id - द
openउस विभाग की स्थिति
kredis_setमें जोड़ देगा या हटा देगा वर्तमान में लॉग-इन उपयोगकर्ता के लिए। - द
- <पी> एक उत्तेजना नियंत्रक बनाएं जो विवरण तत्व पर टॉगल इवेंट को सुनेगा और संबंधित पेलोड पर भेजेगा।
User में जोड़ना मॉडल kredis_set पर कॉल करने जितना आसान है और एक पहचानकर्ता पास करना: <पी> इसके बाद, हम एक UIStateController जनरेट करते हैं यूआई स्थिति अपडेट प्राप्त करने के लिए। ध्यान दें कि हमें जेनरेट किए गए रूट को patch के रूप में कॉन्फ़िगर करना होगा समापन बिंदु: <पी> क्रेडिस एपीआई के साथ हमारी पहली मुठभेड़ नियंत्रक में है। हम देख सकते हैं कि यह यथासंभव रूबी डेवलपर्स की अपेक्षाओं के अनुरूप होने का प्रयास करता है, इसलिए आप << का उपयोग करके सेट में जोड़ सकते हैं , और remove का उपयोग करके हटाएं . <पी> यहां क्या हो रहा है कि हम एक विशिष्ट department_id की उपस्थिति को टॉगल करते हैं open पर आधारित सेट में परम ग्राहक से सौंपा जा रहा है। चित्र को पूरा करने के लिए, हमें इन यूआई स्थिति परिवर्तनों को प्रसारित करने के लिए कुछ क्लाइंट-साइड कोड लिखना होगा। <पी> हम @rails/request.js का उपयोग करने जा रहे हैं कार्रवाई करने के लिए, इसलिए हमें इसे पिन करना होगा: <पी> एक नए स्टिमुलस नियंत्रक में जिसे हम एक विशिष्ट <details> से जोड़ेंगे तत्व, हम विभाग आईडी और उसके open को जोड़ते हैं FormData पर बताएं आपत्ति करें, और इसे सबमिट करें: <पी> हम अपने व्यू कोड को प्रस्तावित अनुसार संपादित करते हैं, और toggle को सुनते हैं प्रत्येक <details> की घटना यूआई स्थिति अपडेट को ट्रिगर करने के लिए तत्व: DOM को मैन्युअल रूप से रीहाइड्रेट करें
<पी> पूर्ण चक्र में जाने के लिए गायब एकमात्र घटक रीहाइड्रेटिंग है उपयोगकर्ता द्वारा पृष्ठ को ताज़ा करने के बाद हमारा DOM वांछित स्थिति में आ जाता है। हम इसेopen जोड़कर मैन्युअल रूप से करते हैं <details> की विशेषता नोड (यदि इसकी विभाग आईडी क्रेडिस सेट में मौजूद है): <पी> अंत में, यहाँ परिणाम है. ध्यान दें कि अलग-अलग ट्री नोड्स की खुली/बंद स्थिति को 2 स्तरों पर संरक्षित किया जाता है: