Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Ruby

क्रेडिस के साथ रेल्स में एपेमेरल यूआई स्टेट को सहजता से स्टोर करें

<पी> क्रेडिस (कीड रेडिस) रेल्स डेवलपर के टूलकिट में हाल ही में जोड़ा गया है। यह Redis पर संरचित डेटा के भंडारण और उस तक पहुंच को सरल बनाने का प्रयास करता है।

<पी> दो-भाग वाली श्रृंखला के इस पहले भाग में, हम यह जानकर शुरुआत करेंगे कि क्रेडिस कैसे काम करता है। फिर हम एक विशेष रेडिस कुंजी का उपयोग करके क्षणिक यूआई स्थिति को संग्रहीत करने के लिए एक उदाहरण उपयोग केस के माध्यम से चलेंगे।

<पी> आइए शुरू करें!

रेल के लिए क्रेडिस का एक परिचय

<पी> क्रेडिस एक रेल्टी है जो तीन तरीकों से इसके उपयोग को सुव्यवस्थित करने के लिए सुविधाजनक रैपर प्रदान करता है:

  • रूबी-एस्क एपीआई :उदाहरण के लिए, संग्रह प्रकार जैसे Kredis.list या Kredis.set जितना संभव हो देशी रूबी प्रकार (और उनके संबंधित एपीआई) का अनुकरण करें।
  • टाइपिंग :विशेष रूप से संग्रह के लिए उपयोगी, क्रेडिस तत्वों को मानक डेटा प्रकारों (उदाहरण के लिए, datetime) से टाइप कास्टिंग करने का काम संभाल सकता है। , json ).
  • एक्टिवरिकॉर्ड डीएसएल :संभवतः लाइब्रेरी की सबसे बड़ी संपत्ति, यह आपको किसी भी रेडिस डेटा संरचना को विशिष्ट मॉडल उदाहरण के साथ आसानी से कनेक्ट करने की अनुमति देती है। .
<पी> यहां README से एक उदाहरण दिया गया है:

 <पी> क्रेडिस का प्रमुख लाभ एक निश्चित रिकॉर्ड से जुड़ी अल्पकालिक जानकारी को संग्रहीत करने में आसानी है, लेकिन सत्र से स्वतंत्र . आमतौर पर, जब आपको रेल्स में डेटा जारी रखने की आवश्यकता होती है, तो आपके पास कुछ विकल्प होते हैं - जिनमें से दो सबसे आम हैं:

  • एक्टिवरिकॉर्ड :ज्यादातर मामलों में, इसके लिए एक कॉलम जोड़ने या अन्यथा आपके डेटा मॉडल को पैच करने की आवश्यकता होती है। माइग्रेशन की आवश्यकता है, साथ ही पुराने रिकॉर्ड की वैकल्पिक बैकफ़िलिंग भी।
  • सत्र :प्रत्येक रेल ऐप का डिफ़ॉल्ट कुंजी/मूल्य स्टोर और इसके लिए कोई या बहुत कम सेटअप की आवश्यकता होती है। नकारात्मक पक्ष यह है कि इसमें संग्रहीत डेटा लॉगिन/लॉगआउट चक्र से बच नहीं पाता है।
<पी> क्रेडिस तालिका में तीसरा विकल्प लाता है। मॉडल में डीएसएल लागू करने के अलावा, थोड़ा सेटअप आवश्यक है। लेकिन जब तक आपका Redis इंस्टेंस बंद नहीं हो जाता, आपका डेटा सत्रों और यहां तक ​​कि डिवाइसों में संग्रहीत किया जाता है। तो क्रेडिस के लिए एक अच्छा उपयोग का मामला वह गैर-महत्वपूर्ण जानकारी है जिसे आप डिवाइस सीमाओं के पार साझा करना चाहते हैं, उदाहरण के लिए, एक वेब ऐप और एक सहयोगी मोबाइल ऐप में।

केस स्टडी:क्रेडिस का उपयोग करके एक संक्षिप्त/विस्तारित यूआई स्थिति को बनाए रखें और पुनर्स्थापित करें

<पी> क्रेडिस के लिए एक अच्छे उपयोग के मामले का एक विशिष्ट उदाहरण यूआई स्थिति को बनाए रखना है, जैसे:

  • साइडबार खुला/बंद अवस्था
  • वृक्ष दृश्य खुला/बंद अवस्था
  • अकॉर्डियन ध्वस्त/विस्तारित अवस्था
  • कस्टम डैशबोर्ड लेआउट
  • डेटा तालिका की कितनी पंक्तियाँ प्रदर्शित करनी हैं
<पी> उदाहरण के तौर पर, हम देखेंगे कि <details> की संक्षिप्त/विस्तारित स्थिति को कैसे प्रबंधित किया जाए तत्त्व.

<पी> आइए एक ताज़ा रेल ऐप से शुरुआत करें, kredis जोड़ें बंडल में, और इसका इंस्टॉलर चलाएँ:

 <पी> ध्यान दें: यह config/redis/shared.yml में एक Redis कॉन्फ़िगरेशन फ़ाइल बनाएगा .

<पी> इस लेख के शेष भाग के लिए, मैं मान लूंगा कि आपके पास स्थानीय रूप से चलने वाला Redis उदाहरण है। Homebrew के साथ macOS पर, इसे चलाना उतना ही आसान है:

 <पी> कृपया अपने ऑपरेटिंग सिस्टम पर Redis इंस्टॉल करने के तरीके के बारे में जानकारी के लिए आधिकारिक "गेटिंग स्टार्टेड" गाइड से परामर्श लें।

उपयोगकर्ता प्रमाणीकरण

<पी> हम User का उपयोग करने जा रहे हैं यूआई स्थिति जानकारी संग्रहीत करने के लिए इकाई के रूप में मॉडल। यहां बाइकशेडिंग से बचने के लिए, आइए हम डेविस द्वारा प्रदान की गई चीज़ों का उपयोग करें:

 <पी> फिर हम रेल्स कंसोल में एक उदाहरण उपयोगकर्ता बनाते हैं:

 

हमारा उदाहरण ऐप:एक ऑनलाइन स्टोर

<पी> यह समझाने के लिए कि क्रेडिस एक जटिल वृक्ष संरचना की स्थिति को बनाए रखने में कैसे मदद कर सकता है, आइए मान लें कि हम एक ऑनलाइन डिपार्टमेंट स्टोर चला रहे हैं। इस प्रयोजन के लिए, हम Department को मचान बनाएंगे और Product मॉडल. हम दो-स्तरीय नेस्टेड संरचना बनाने के लिए एक विभाग से दूसरे विभाग में स्वयं शामिल होते हैं:

 <पी> बेशक, हमें अपने पेड़ की संरचना की जड़ों के लिए अशक्त माता-पिता को अनुमति देनी होगी:

 <पी> हमारा Department और Product मॉडलों को इस प्रकार परिभाषित किया गया है:

 <पी> अंत में, हम कुछ बीज डेटा उत्पन्न करने के लिए फ़कर का उपयोग करते हैं:

 

स्टोरफ्रंट पर मचान बनाना

<पी> हम एक बहुत ही सरल HomeController बनाएंगे वह हमारी दुकान के स्टोरफ्रंट के रूप में कार्य करेगा।

 <पी> हम केवल उन विभागों को पुनः प्राप्त करने के लिए विभागों के बच्चों पर स्वयं शामिल होते हैं जिनमें वास्तव में उपविभाग हैं (या, दूसरे शब्दों में, हमारे पेड़ की जड़ें हैं):

 <पी> इंडेक्स व्यू में, हम <details> के दो स्तरों का उपयोग करके एक नेस्टेड ट्री व्यू सेट करते हैं हमारे विभागों के लिए तत्व:

 <पी> अभी हमारे पास जानबूझकर मूर्खतापूर्ण उत्पाद नामों वाले विभागों का एक ट्री व्यू है जिसे हम खोलकर और बंद करके देख सकते हैं:

<पी> क्रेडिस के साथ रेल्स में एपेमेरल यूआई स्टेट को सहजता से स्टोर करें

<पी> हम अलग-अलग श्रेणियों की प्रकटीकरण स्थिति को जारी रखना चाहेंगे, जिसे हम आगे बढ़ाएंगे।

क्रेडिस में श्रेणियों की सतत यूआई स्थिति

<पी> यहाँ हम चरण दर चरण क्या करने जा रहे हैं:

  1. <पी> एक kredis_set जोड़ें open_department_ids कहा जाता है User पर मॉडल. हम यहां एक सेट का उपयोग इसलिए कर रहे हैं क्योंकि यह डुप्लिकेट की अनुमति नहीं देता है, इसलिए हम अपने विभागों को सुरक्षित रूप से जोड़ और हटा सकते हैं।

  2. <पी> एक UIStateController बनाएं जिसे निम्नलिखित पैरामीटर प्राप्त होंगे:

    • department_id
    • open उस विभाग की स्थिति
    <पी> इसके बाद यह इस विभाग को kredis_set में जोड़ देगा या हटा देगा वर्तमान में लॉग-इन उपयोगकर्ता के लिए।

  3. <पी> एक उत्तेजना नियंत्रक बनाएं जो विवरण तत्व पर टॉगल इवेंट को सुनेगा और संबंधित पेलोड पर भेजेगा।

<पी> आइए इसमें शामिल हों!

<पी> उक्त क्रेडिस डेटा संरचना को User में जोड़ना मॉडल kredis_set पर कॉल करने जितना आसान है और एक पहचानकर्ता पास करना:

 <पी> इसके बाद, हम एक UIStateController जनरेट करते हैं यूआई स्थिति अपडेट प्राप्त करने के लिए। ध्यान दें कि हमें जेनरेट किए गए रूट को patch के रूप में कॉन्फ़िगर करना होगा समापन बिंदु:

 
 <पी> क्रेडिस एपीआई के साथ हमारी पहली मुठभेड़ नियंत्रक में है। हम देख सकते हैं कि यह यथासंभव रूबी डेवलपर्स की अपेक्षाओं के अनुरूप होने का प्रयास करता है, इसलिए आप << का उपयोग करके सेट में जोड़ सकते हैं , और remove का उपयोग करके हटाएं .

 <पी> यहां क्या हो रहा है कि हम एक विशिष्ट department_id की उपस्थिति को टॉगल करते हैं open पर आधारित सेट में परम ग्राहक से सौंपा जा रहा है। चित्र को पूरा करने के लिए, हमें इन यूआई स्थिति परिवर्तनों को प्रसारित करने के लिए कुछ क्लाइंट-साइड कोड लिखना होगा।

<पी> हम @rails/request.js का उपयोग करने जा रहे हैं कार्रवाई करने के लिए, इसलिए हमें इसे पिन करना होगा:

 <पी> एक नए स्टिमुलस नियंत्रक में जिसे हम एक विशिष्ट <details> से जोड़ेंगे तत्व, हम विभाग आईडी और उसके open को जोड़ते हैं FormData पर बताएं आपत्ति करें, और इसे सबमिट करें:

 <पी> हम अपने व्यू कोड को प्रस्तावित अनुसार संपादित करते हैं, और toggle को सुनते हैं प्रत्येक <details> की घटना यूआई स्थिति अपडेट को ट्रिगर करने के लिए तत्व:

 

DOM को मैन्युअल रूप से रीहाइड्रेट करें

<पी> पूर्ण चक्र में जाने के लिए गायब एकमात्र घटक रीहाइड्रेटिंग है उपयोगकर्ता द्वारा पृष्ठ को ताज़ा करने के बाद हमारा DOM वांछित स्थिति में आ जाता है। हम इसे open जोड़कर मैन्युअल रूप से करते हैं <details> की विशेषता नोड (यदि इसकी विभाग आईडी क्रेडिस सेट में मौजूद है):

 <पी> अंत में, यहाँ परिणाम है. ध्यान दें कि अलग-अलग ट्री नोड्स की खुली/बंद स्थिति को 2 स्तरों पर संरक्षित किया जाता है:

अगला:यूआई स्थिति के लिए एक सामान्यीकृत उपयोगकर्ता-स्थानीय कंटेनर

<पी> इस दो-भाग वाली श्रृंखला के पहले भाग में, हमने क्रेडिस का परिचय दिया और पता लगाया कि क्रेडिस के साथ एक संक्षिप्त/विस्तारित यूआई स्थिति को कैसे बनाए रखा और पुनर्स्थापित किया जाए।

<पी> हमने यह उजागर करने के लिए एक ऑनलाइन डिपार्टमेंट स्टोर के उदाहरण का उपयोग किया कि कैसे क्रेडिस एक जटिल वृक्ष संरचना की स्थिति को बनाए रख सकता है, अंत में DOM को मैन्युअल रूप से पुनर्जलीकरण करने से पहले।

<पी> हालाँकि, इसका मतलब यह है कि हमें बहुत सारी क्रेडिस कुंजियों का आविष्कार करना होगा। अगली बार, हम इस बात पर विचार करेंगे कि यूआई स्थिति के लिए सामान्यीकृत उपयोगकर्ता-स्थानीय कंटेनर के साथ हम इसे कैसे संबोधित कर सकते हैं।

<पी> तब तक, कोडिंग का आनंद लें!

<पी> पी.एस. यदि आप प्रेस से हटते ही रूबी मैजिक पोस्ट पढ़ना चाहते हैं, तो हमारे रूबी मैजिक न्यूज़लेटर की सदस्यता लें और एक भी पोस्ट न चूकें!
  1. HTML वर्तमान लक्ष्य घटना संपत्ति HTML वर्तमान लक्ष्य घटना संपत्ति

    HTML में currentTarget ईवेंट प्रॉपर्टी का उपयोग उस तत्व को प्राप्त करने के लिए किया जाता है जिसके ईवेंट श्रोताओं ने ईवेंट को ट्रिगर किया। निम्नलिखित वाक्य रचना है - event.currentTarget आइए अब वर्तमान लक्ष्य घटना संपत्ति को लागू करने के लिए एक उदाहरण देखें - उदाहरण <!DOCTYPE html> <html>

  1. PHP में इमेजस्ट्रिंगअप () फ़ंक्शन का उपयोग करके लंबवत रूप से एक स्ट्रिंग कैसे आकर्षित करें? PHP में इमेजस्ट्रिंगअप () फ़ंक्शन का उपयोग करके लंबवत रूप से एक स्ट्रिंग कैसे आकर्षित करें?

    इमेजस्ट्रिंगअप () PHP में एक इनबिल्ट फंक्शन है जिसका उपयोग इमेज को लंबवत रूप से खींचने के लिए किया जाता है। सिंटैक्स bool imagestringup ($image, $font, $x, $y, $string, $color) पैरामीटर इमेजस्ट्रिंग () छह पैरामीटर स्वीकार करता है:$image, $font, $x, $y, $string, और $color. $छवि − $image पैरामीटर

  1. रूबी ऑन रेल्स बनाम हनामी:अपने प्रोजेक्ट के लिए सही वेब फ्रेमवर्क चुनना रूबी ऑन रेल्स बनाम हनामी:अपने प्रोजेक्ट के लिए सही वेब फ्रेमवर्क चुनना

    रेल और हनामी के बीच मॉडल और डेटा दृढ़ता में अंतर को स्पष्ट करने के लिए यह पोस्ट 23 मई 2024 को अपडेट किया गया था। रूबी ऑन रेल्स, रूबी इकोसिस्टम में सबसे लोकप्रिय वेब फ्रेमवर्क है और इसका उपयोगकर्ता आधार बड़ा है, जिसमें फ्रीलांसरों से लेकर बड़ी स्थापित कंपनियां तक शामिल हैं। एक सक्रिय उपयोगकर्ता समु