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

रेल पैरामीटर क्या हैं और उनका सही तरीके से उपयोग कैसे करें

रेल मापदंडों के बारे में बात करते हैं!

वे उपयोगी क्यों हैं?

उपयोगकर्ता आपके वेब एप्लिकेशन को तीन अलग-अलग तरीकों से डेटा भेज सकते हैं।

ये तीन तरीके हैं :

  1. क्वेरी पैरामीटर का उपयोग करना ("example.com/?q=bacon" )
  2. फ़ॉर्म सबमिट करना ("/users/sign_in" )
  3. यूआरएल में ही ("/books/1" )

आप इस डेटा को रेल से कैसे एक्सेस करते हैं?

params के साथ ।

आपकी नियंत्रक कार्रवाई . के अंदर आप params . पर कॉल कर सकते हैं फ़ॉर्म और URL क्वेरी डेटा तक पहुंच

params क्या है? , बिल्कुल?

यह एक ऐसा तरीका है जो ActionController::Parameters . लौटाता है वस्तु, व्यवहार में यह एक हैश की तरह व्यवहार करती है।

अब।

मान लें कि आप इस params . से एक मान पढ़ना चाहते हैं हैश।

यहां बताया गया है :

params[:id]

यदि यह मौजूद है तो आपको मूल्य मिलता है।

या nil अगर ऐसा नहीं होता है।

कुछ जानने योग्य बातें :

  • यदि कोई फ़ील्ड खाली छोड़ दिया जाता है आपको एक खाली स्ट्रिंग मिलेगी
  • params के अंदर सभी मान तार हैं। भले ही उन्हें पूर्णांक के रूप में सबमिट किया गया हो

आइए रेल पैराम्स में थोड़ा गहराई से देखें क्योंकि यदि आप उन्हें अच्छी तरह से नहीं समझते हैं वे भ्रम और अजीब समस्याओं का स्रोत हो सकते हैं!

रेल कन्वेंशन:फॉर्म फील्ड्स और पैराम्स

फ़ॉर्म फ़ील्ड और URL पैरामीटर params . पर कैसे मैप करते हैं चाबियाँ?

मेरे पास आपके लिए एक उदाहरण है।

यहां :


यह एक सरल खोज फ़ॉर्म है जो /search . पर एक POST अनुरोध भेजेगा ।

परिणामस्वरूप, आपको यह params मिलेगा वस्तु:

{ "q"=>"", "controller"=>"books", "action"=>"search" }

यह "क्यू" क्या है?

यह HTML फॉर्म में इनपुट फ़ील्ड का नाम विशेषता है

नाम कुछ भी हो सकता है जो आप चाहते हैं।

यदि आप form_for . का उपयोग करके अपना फ़ॉर्म बनाते हैं सहायक विधि, नाम आपके लिए स्वतः उत्पन्न होते हैं और वे एक विशिष्ट पैटर्न का पालन करते हैं।

यहां एक उदाहरण दिया गया है :

# form_for(@book) with a few fields generates something like this


यह book[title] फ़ील्ड नामों में प्रारूप एक params उत्पन्न करेगा हैश जहां मान नेस्ट किए जाएंगे।

मैं एक उदाहरण के साथ समझाता हूं :

{
  "book"=>
    {
      "title"=>"",
      "author"=>"",
      "cover"=>"",
      "language"=>"English"
    }
}

उपयोगकर्ता एक खाली फ़ॉर्म सबमिट करता है और आपको यही मिलता है।

आपके नियंत्रक से…

आप डेटा को इस तरह एक्सेस करते हैं :

params[:book][:language]
# "English"

params[:book][:author]
# ""

याद रखें कि यह एक हैश की तरह व्यवहार करता है, लेकिन एक नियमित हैश के विपरीत, यह दोनों प्रतीकों और स्ट्रिंग्स को समान कुंजियों के रूप में स्वीकार करेगा।

मतलब कि params["book"] और params[:book] वही हैं।

पैरामीटर स्वीकार करने के लिए अपने मार्गों को सक्षम करना

क्वेरी पैरामीटर के अलावा, आप आरईएसटी-शैली पैरामीटर भी सक्षम कर सकते हैं।

रेल में, हम इसे "डायनेमिक सेगमेंट" कहते हैं।

आइए एक उदाहरण देखें।

यदि आपके पास कोई मार्ग है जैसे :

get 'books/:id', to: 'books#show'

या :

resources :books

आप इस तरह के URL का उपयोग करने में सक्षम होंगे :

/books/1

फिर आप इस 1 . तक पहुंच सकते हैं , जो कि id है books/:id . में ।

params के साथ ।

इसे पसंद करें :

params[:id]

यह आपको उस विशिष्ट संसाधन को खोजने में मदद करेगा जिसे उपयोगकर्ता ढूंढ रहा है।

Book.find(params[:id])

मजबूत पैरा को समझना

अगला:

यदि आप किसी ऑब्जेक्ट को अपने डेटाबेस में सहेजने का प्रयास करते हैं, लेकिन यह काम नहीं करता है।

अपने रेल सर्वर लॉग को देखें।

आप इसे देख सकते हैं :

Unpermitted parameter: :language

इसका क्या मतलब है?

रेल ने सुरक्षा सुविधा के रूप में रेल 4 में वापस "मजबूत पैरामीटर" प्रणाली की शुरुआत की।

यह आपको विशेषताओं को श्वेतसूची में डालने . के लिए बाध्य करता है जिसे बचाया जा सकता है।

यह "मास असाइनमेंट" के रूप में जानी जाने वाली समस्या को रोकता है, जो दुर्भावनापूर्ण उपयोगकर्ताओं को admin = true . सेट करने की अनुमति देता है , या अन्य फ़ील्ड सेट करें जिन तक सामान्य रूप से उनकी पहुंच नहीं होगी।

आप इस तरह फ़ील्ड को श्वेतसूची में डाल सकते हैं :

def book_params
  params.require(:book).permit(:title, :author, :cover, :language)
end

यह कैसे काम करता है?

  • require विधि params[:book] के लिए खोजेगी &अगर कोई त्रुटि नहीं है तो उसे उठाएं।
  • permit विधि अनुमत (लेकिन वैकल्पिक) विशेषताओं की एक सूची है।

परिणामस्वरूप, आपको एक नया params वापस मिलता है इन विशेषताओं के साथ हैश, लेकिन अब वे डेटाबेस में सहेजे जाने के लिए स्पष्ट हैं।

उदाहरण :

Book.create(book_params)

ध्यान दें कि एक नियमित रूबी हैश इस सुरक्षा प्रणाली को बायपास कर देगा।

उदाहरण :

Book.create(title: "", author: "", cover: "")

यह ठीक होना चाहिए यदि विशेषता नाम (जैसे author ) हार्डकोडेड हैं।

सारांश

आपने रेल मापदंडों के बारे में सीखा है कि वे कैसे काम करते हैं और अपने रेल परियोजनाओं में उनका सही तरीके से उपयोग कैसे करते हैं!

अब अभ्यास करने, नोट्स लेने, समीक्षा करने की आपकी बारी है 🙂

पढ़ने के लिए धन्यवाद।


  1. रेल एप्लिकेशन में OmniAuth-Twitter का उपयोग कैसे करें

    इस ट्यूटोरियल में, आप सीखेंगे कि आपके एप्लिकेशन के उपयोगकर्ताओं को अपने ट्विटर अकाउंट का उपयोग करके लॉग इन करने की अनुमति कैसे दी जाए। OAuth जैसे टूल से ऐसा करना आसान बना दिया गया है। आप OmniAuth-Twitter का उपयोग करेंगे, जिसमें OmniAuth के लिए Twitter रणनीति शामिल है। चलो गोता लगाएँ! आरंभ कर

  1. Google मानचित्र प्लस कोड क्या हैं और उनका उपयोग कैसे करें

    हो सकता है कि आपने Google मानचित्र प्लस कोड के बारे में सुना हो, लेकिन अधिक जानने के लिए आपके पास समय नहीं था। या शायद आपने Google मानचित्र का उपयोग करते समय स्थानों के लिए प्लस कोड देखे हैं और सोचा है कि वे क्या थे। यहां हम संक्षेप में बताएंगे कि प्लस कोड क्या होते हैं, उनका आशय क्या होता है और आप

  1. Windows Sysinternals:वे क्या हैं और उनका उपयोग कैसे करें?

    क्या आपने कभी चाहा है कि आपके पास अपने विंडोज कंप्यूटर पर पूर्ण नियंत्रण हो? लगभग किसी भी विंडोज प्रक्रिया या एप्लिकेशन के अंदर न केवल देखने की क्षमता होना अविश्वसनीय है, बल्कि उन फाइलों और रजिस्ट्री प्रविष्टियों को भी देखने की क्षमता है, जिन्हें आपके एप्लिकेशन वास्तविक समय में एक्सेस कर रहे हैं। स