जवाबों:
REST के कार्यान्वयन के भीतर नई और बनाएँ अलग तरह से व्यवहार किया जाता है।
एक HTTP GET /resources/new
का उद्देश्य नए संसाधन बनाने के लिए उपयुक्त फॉर्म को प्रस्तुत करना है, जो यह नियंत्रक के भीतर नई कार्रवाई को कॉल करके करता है , जो एक नया सहेजा गया रिकॉर्ड बनाता है और प्रपत्र को प्रस्तुत करता है।
एक HTTP POST नए एक्शन के /resources
हिस्से के रूप में बनाए गए रिकॉर्ड को लेने के लिए और इसे कंट्रोलर के भीतर क्रिएट एक्शन में पास करता है, जो तब इसे डेटाबेस में सहेजने का प्रयास करता है।
से ActiveRecord :: बेस प्रलेखन:
create (विशेषताएँ = शून्य) {| ऑब्जेक्ट | ...}
एक ऑब्जेक्ट (या कई ऑब्जेक्ट्स) बनाता है और डेटाबेस में सहेजता है, यदि सत्यापन पास होते हैं। परिणामी वस्तु को लौटाया जाता है कि क्या वस्तु को डेटाबेस में सफलतापूर्वक सहेजा गया था या नहीं।
new (विशेषताएँ = शून्य) {| स्व यदि block_given? | ...}
नई वस्तुओं को या तो खाली (कोई निर्माण पैरामीटर पास नहीं) या विशेषताओं के साथ पूर्व-निर्धारित किया जा सकता है लेकिन अभी तक सहेजा नहीं गया है (संबंधित तालिका स्तंभ नामों से मेल खाते कुंजी नामों के साथ एक हैश पास करें)। दोनों उदाहरणों में, मान्य विशेषता कुंजियाँ संबंधित तालिका के स्तंभ नामों द्वारा निर्धारित की जाती हैं - इसलिए आपके पास ऐसी विशेषताएँ नहीं हो सकती हैं जो तालिका स्तंभों का हिस्सा नहीं हैं।
तो create
नई वस्तु को तत्काल बदल देता है, इसे सत्यापित करता है, और फिर इसे डेटाबेस में सहेजता है। और new
केवल स्थानीय वस्तु बनाता है लेकिन इसे डीबी को मान्य या सहेजने का प्रयास नहीं करता है।
नई एक नई मॉडल का उदाहरण देती है, लेकिन इसे सहेजने की विधि नहीं है।
क्रिएट नए जैसा ही करता है, लेकिन इसे डेटाबेस में सेव भी करता है।
कभी-कभी आप डेटाबेस में कुछ सहेजने से पहले सामान करना चाहते हैं, कभी-कभी आप इसे सीधे बनाना और सहेजना चाहते हैं।
HTTP प्रोटोकॉल कैसे काम करता है, इसके लिए रेल्स के Restful भागों को बहुत करीब से बनाया गया है। HTTP प्रोटोकॉल में, GET अनुरोध किसी भी डेटा को संशोधित करने के लिए नहीं है। तार्किक रूप से, यदि आप Rails के सभी क्रियात्मक कार्यों के तरीके को देखते हैं, तो वे HTTP क्रियाओं के साथ मेल खाएंगे। एक POST नया डेटा जेनरेट करने के लिए है, इसलिए यह तार्किक रूप से निर्मित है। आप GET का उपयोग उस या अन्य शब्दों में, नई क्रिया के रूप के रूप में सेवा करने के लिए करते हैं। इंडेक्स और शो भी GETs हैं, अपडेट एक PUT (या Rails 4+ में PATCH) है, और नष्ट HTTP में एक DELETE है।
इसके अलावा, यह नियंत्रक में तर्क को अलग करता है और आपको त्रुटियों से निपटने का एक आसान तरीका देता है (त्रुटि संदेशों के साथ नई कार्रवाई को फिर से प्रस्तुत करना)।
"You use a GET to serve the form version of that or in other words, the new action"
जवाब के लिए धन्यवाद, लेकिन व्यक्तिगत रूप से मुझे यह नामकरण सम्मेलन वास्तव में भ्रामक लगता है