फ्लैश मैसेजेस क्या हैं?
एक फ्लैश मैसेज आपके रेल्स एप्लिकेशन के उपयोगकर्ताओं के साथ जानकारी संवाद करने का एक तरीका है ताकि वे जान सकें कि उनके कार्यों के परिणामस्वरूप क्या होता है।
उदाहरण संदेश:
- "पासवर्ड सही ढंग से बदला गया" (पुष्टि)
- "उपयोगकर्ता नहीं मिला" (त्रुटि)
आप इन फ्लैश मैसेजेस को अपने कंट्रोलर्स में सेट करते हैं, फिर उन्हें अपने व्यूज में रेंडर करते हैं। आपके उपयोगकर्ता तब तदनुसार कार्य कर सकते हैं।
आइए सीखें कि यह वास्तव में कैसे काम करता है!
फ्लैश मैसेजेस का उपयोग कैसे करें
आप इन अधिसूचना संदेशों के साथ flash हेल्पर मेथड का उपयोग करके काम कर सकते हैं।
यह रूबी हैश की तरह बहुत व्यवहार करता है।
फ्लैश ऑब्जेक्ट में keys, any? या each जैसे मेथड्स होते हैं और आप [] के साथ किसी विशेष संदेश तक पहुंच सकते हैं।
आप किस प्रकार के फ्लैश मैसेज सेट कर सकते हैं?
डिफ़ॉल्ट रूप से आपके पास हैं:
- notice
- alert
यहां इसका उपयोग करने का एक उदाहरण है:
flash.alert = "User not found."
या यदि आप पसंद करते हैं:
flash[:alert] = "User not found."
(केवल शैली का अंतर।)
आप इस कोड का उपयोग अपने कंट्रोलर एक्शन्स में कर सकते हैं, जैसे index, create, new, आदि।
एक और तरीका यह है:
redirect_to :books_path, notice: "Book not found"
यह आपको रीडायरेक्ट करने और एक ही चरण में फ्लैश मैसेज बनाने की अनुमति देता है।
अच्छा!
Alert बनाम Notice
जहां तक मुझे समझ में आता है, यह वास्तव में मायने नहीं रखता कि आप alert या notice का उपयोग करते हैं।
उसका उपयोग करें जो आपकी स्थिति के लिए अधिक स्वाभाविक लगता है।
मैं alert को त्रुटि संदेश के रूप में और notice को पुष्टि संदेश के रूप में सोचना पसंद करता हूं।
उन्हें अलग करने से आपको उन्हें अलग ढंग से स्टाइल करने में मदद मिलती है।
उदाहरण के लिए:
आप अलर्ट्स को लाल और नोटिस को हरे रंग में दिखा सकते हैं।
add_flash_types कंट्रोलर मेथड का उपयोग करके अपने स्वयं के फ्लैश प्रकार बनाना भी संभव है।
इस तरह:
class ApplicationController add_flash_types :info, :error, :warning end
मैं चीजों को सरल रखना पसंद करता हूं, इसलिए मैं बिल्ट-इन प्रकारों के साथ रहता हूं 🙂
फ्लैश मैसेजेस रेंडर करना
फ्लैश मैसेजेस स्वचालित रूप से नहीं दिखाए जाते हैं।
आपको उन्हें अपने व्यूज में से एक के अंदर रेंडर करना होगा ताकि उपयोगकर्ता उन्हें देख सकें।
इसे अपने एप्लिकेशन लेआउट में जोड़ने पर विचार करें।
यहां एक कोड उदाहरण है:
<% flash.each do |type, msg| %> <%= msg %> <% end %>
इसे वहां रखें जहां आप अपना नोटिस दिखाना चाहते हैं, आमतौर पर पेज के शीर्ष पर, मेनू बार के नीचे।
याद रखें:
एक बार जब आप एक संदेश रेंडर करते हैं तो यह flash से हटा दिया जाएगा, इसलिए इसे फिर से नहीं दिखाया जाएगा।
अपने नोटिस और अलर्ट संदेशों को स्टाइल करना
फ्लैश मैसेजेस का कोई बिल्ट-इन डिज़ाइन या स्टाइल नहीं है।
समाधान?
यदि आप बूटस्ट्रैप का उपयोग कर रहे हैं, तो आप फ्लैश मैसेजेस को अच्छा दिखाने के लिए "alert alert-info" CSS क्लास का उपयोग कर सकते हैं।
उदाहरण:
<% flash.each do |type, msg| %> <%= msg %> <% end %>
यह ऐसा दिखता है:

यदि आप बूटस्ट्रैप का उपयोग नहीं कर रहे हैं, तो आप इसे जैसा चाहें वैसा दिखाने के लिए अपना खुद का CSS लिख सकते हैं।
फ्लैश मैसेजेस कब रेंडर किए जाते हैं?
फ्लैश मैसेजेस केवल आपके अगले कंट्रोलर एक्शन पर हटाए जाते हैं, उन्हें प्रदर्शित करने के बाद।
निहितार्थ:
- यदि आप
redirect_toकरते हैं, फिरflashमैसेज रेंडर करते हैं, यह अच्छा है - यदि आप
redirect_toकरते हैं और संदेश नहीं रेंडर करते, तो संदेशflashहैश में बना रहेगा - यदि आप उसी एक्शन पर
renderकरते हैं जिस पर आपflashमैसेज सेट कर रहे हैं, तो वहflashमैसेज उपलब्ध होगा, लेकिन नहीं हटाया जाएगा इसलिए यह बना रहेगा और संभावित रूप से दो बार दिखाया जाएगा
तो...
क्या होगा यदि आप वर्तमान एक्शन के लिए फ्लैश मैसेज सेट करना चाहते हैं?
यहीं flash.now आता है!
यहां एक उदाहरण है:
def index @books = Book.all flash.now[:notice] = "We have exactly #{@books.size} books available." end यह index व्यू को रेंडर करेगा।
notice मैसेज दिखाया जाएगा और flash से हटा दिया जाएगा ताकि यह दो बार न दिखाया जाए।
दूसरे शब्दों में:
आपको केवल flash.now का उपयोग करने की आवश्यकता है यदि आप रीडायरेक्ट करने के बजाय render करने जा रहे हैं।
सारांश
आपने रेल्स में फ्लैश मैसेजेस के बारे में सीखा और उनका सही उपयोग कैसे करें!
बात दें, फ्लैश मैसेजेस वैलिडेशन त्रुटियों के समान नहीं हैं। वैलिडेशन मॉडल ऑब्जेक्ट से जुड़े होते हैं, और आप इन वैलिडेशन संदेशों को errors मेथड से एक्सेस करते हैं, जैसे @user.errors।
अब कुछ कोड लिखकर इसे अभ्यास में लाने की आपकी बारी है।
पढ़ने के लिए धन्यवाद!