Rails कन्वेंशन्स: फॉर्म फील्ड्स और पैरामीटर्स
फॉर्म फील्ड्स और URL पैरामीटर्स params कीज़ से कैसे मैप होते हैं?
मेरे पास आपके लिए एक उदाहरण है।
यहाँ:
यह एक साधारण खोज फॉर्म है जो /search पर POST अनुरोध भेजेगा।
परिणामस्वरूप, आपको यह params ऑब्जेक्ट मिलेगा:
{ "q"=>"", "controller"=>"books", "action"=>"search" }
यह "q" क्या है?
यह HTML फॉर्म में इनपुट फील्ड का नाम विशेषता है।
नाम कुछ भी हो सकता है जो आप चाहते हैं।
यदि आप form_for हेल्पर मेथड का उपयोग करके अपना फॉर्म बनाते हैं, तो नाम आपके लिए ऑटो-जेनरेट होते हैं और वे एक विशिष्ट पैटर्न का पालन करते हैं।
यहाँ एक उदाहरण है:
# form_for(@book) कुछ फील्ड्स के साथ ऐसा कुछ जनरेट करता है
फील्ड नामों में यह book[title] फॉर्मेट एक params हैश जनरेट करेगा जहां वैल्यूज नेस्टेड होंगी।
एक उदाहरण के साथ मुझे समझाने दें:
{ "book"=> { "title"=>"", "author"=>"", "cover"=>"", "language"=>"English" } }
यूज़र एक खाली फॉर्म सबमिट करता है और यह वही है जो आपको मिलता है।
आपके कंट्रोलर से...
आप डेटा को इस तरह एक्सेस करते हैं:
params[:book][:language] # "English" params[:book][:author] # ""
याद रखें कि यह एक हैश की तरह व्यवहार करता है, लेकिन एक नियमित हैश के विपरीत, यह सिंबल्स और स्ट्रिंग्स दोनों को समकक्ष कीज़ के रूप में स्वीकार करेगा।
मतलब params["book"] और params[:book] समान हैं।
अपने रूट्स को पैरामीटर्स स्वीकार करने में सक्षम करना
क्वेरी पैरामीटर्स के अलावा, आप REST-स्टाइल पैरामीटर्स को भी सक्षम कर सकते हैं।
Rails में, हम इसे "डायनामिक सेगमेंट" कहते हैं।
आइए एक उदाहरण देखें।
यदि आपके पास ऐसा रूट है:
get 'books/:id', to: 'books#show'
या:
resources :books
आप इस तरह के URLs का उपयोग कर पाएंगे:
/books/1
फिर आप इस 1 को एक्सेस कर सकते हैं, जो books/:id में id है।
params के साथ।
इस तरह:
params[:id]
यह आपको वह विशिष्ट संसाधन ढूंढने में मदद करेगा जिसे यूज़र ढूंढ रहा है।
Book.find(params[:id])
Strong Params को समझना
अगला:
यदि आप अपने डेटाबेस में एक ऑब्जेक्ट सेव करने का प्रयास करते हैं, लेकिन यह काम नहीं करता लगता है।
अपने Rails सर्वर लॉग को देखें।
आप यह देख सकते हैं:
Unpermitted parameter: :language
इसका क्या मतलब है?
Rails ने "स्ट्रॉन्ग पैरामीटर्स" सिस्टम पेश किया, Rails 4 में एक सुरक्षा सुविधा के रूप में।
यह आपको उन विशेषताओं को व्हाइटलिस्ट करने के लिए मजबूर करता है जिन्हें सेव किया जा सकता है।
यह "मास असाइनमेंट" के रूप में जानी जाने वाली समस्या को रोकता है, जो दुर्भावनापूर्ण यूज़र्स को admin = true सेट करने, या अन्य फील्ड्स सेट करने की अनुमति देता है जिन तक आमतौर पर उनकी पहुंच नहीं होती।
आप फील्ड्स को इस तरह व्हाइटलिस्ट कर सकते हैं:
def book_params params.require(:book).permit(:title, :author, :cover, :language) end
यह कैसे काम करता है?
requireमेथडparams[:book]की तलाश करेगा और यदि यह वहां नहीं है तो एरर उठाएगाpermitमेथड अनुमत (लेकिन वैकल्पिक) विशेषताओं की एक सूची है
परिणामस्वरूप, आपको इन विशेषताओं के साथ एक नया params हैश वापस मिलता है, लेकिन अब वे डेटाबेस में सेव होने के लिए क्लियर हैं।
उदाहरण:
Book.create(book_params)
ध्यान दें कि एक नियमित Ruby हैश इस सुरक्षा प्रणाली को बायपास कर देगा।
उदाहरण:
Book.create(title: "", author: "", cover: "")
यदि विशेषता नाम (जैसे author) हार्डकोडेड हैं तो यह ठीक होना चाहिए।
सारांश
आपने Rails पैरामीटर्स के बारे में सीखा, वे कैसे काम करते हैं और अपने Rails प्रोजेक्ट्स में उन्हें सही ढंग से कैसे उपयोग करें!
अब अभ्यास करने, नोट्स लेने, रिव्यू करने की आपकी बारी है 🙂
पढ़ने के लिए धन्यवाद।