हालांकि यह सही है कि createकॉल newऔर फिर saveउनके वापसी मूल्यों में दो विकल्पों के बीच एक बड़ा अंतर है।
Savetrueया तो रिटर्न या falseइस बात पर निर्भर करता है कि ऑब्जेक्ट डेटाबेस में सफलतापूर्वक सहेजा गया था या नहीं। यह तो ऊपर दिए गए प्रश्न में पहले उदाहरण के अनुसार प्रवाह नियंत्रण के लिए इस्तेमाल किया जा सकता है।
Createइस मॉडल की परवाह किए बिना कि वस्तु बचाई गई थी या नहीं। इसमें ऊपर दिए गए कोड के निहितार्थ हैं कि ifकथन की शीर्ष शाखा को हमेशा निष्पादित किया जाएगा, भले ही ऑब्जेक्ट सत्यापन विफल हो और सहेजा नहीं गया हो।
यदि आप createब्रांचिंग लॉजिक के साथ उपयोग करते हैं तो आपको साइलेंट फेलियर का खतरा है जो कि अगर आप new+ का उपयोग करते हैं तो ऐसा नहीं है save।
create! यदि रिकॉर्ड अमान्य है, तो यह उसी समस्या से ग्रस्त नहीं होता, जैसा कि ऊपर उठता है और अपवाद होता है।
createजहां वैकल्पिक नियंत्रकों में उपयोगी हो सकता respond_withएपीआई (JSON / XML) प्रतिक्रिया के लिए प्रयोग किया जाता है। इस स्थिति में ऑब्जेक्ट पर त्रुटियों के अस्तित्व की स्थिति के साथ प्रतिक्रिया में त्रुटियों को वापस करने का कारण होगा unprocessable_entity, जो कि वास्तव में आप एक एपीआई से चाहते हैं।
मैं हमेशा html के लिए new+ saveविकल्प का उपयोग करता हूं , खासकर यदि आप प्रवाह नियंत्रण के लिए वापसी मूल्य पर भरोसा कर रहे हैं।