रेल मापदंडों के बारे में बात करते हैं!
वे उपयोगी क्यों हैं?
उपयोगकर्ता आपके वेब एप्लिकेशन को तीन अलग-अलग तरीकों से डेटा भेज सकते हैं।
ये तीन तरीके हैं :
- क्वेरी पैरामीटर का उपयोग करना (
"example.com/?q=bacon"
) - फ़ॉर्म सबमिट करना (
"/users/sign_in"
) - यूआरएल में ही (
"/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
) हार्डकोडेड हैं।
सारांश
आपने रेल मापदंडों के बारे में सीखा है कि वे कैसे काम करते हैं और अपने रेल परियोजनाओं में उनका सही तरीके से उपयोग कैसे करते हैं!
अब अभ्यास करने, नोट्स लेने, समीक्षा करने की आपकी बारी है 🙂
पढ़ने के लिए धन्यवाद।