উত্তর:
কয়েকটি পার্থক্য রয়েছে, তবে সেগুলি বড় নয়:
.create.newদ্বারা অনুসরণ সমতুল্য.save । এটি কেবল আরও সংক্ষিপ্ত।.create!এটি .newঅনুসরণ করার সমতুল্য .save!(সংরক্ষণ ব্যর্থ হলে একটি ত্রুটি নিক্ষেপ করে)। এটি কেবল একটি সামান্য বিট সংক্ষিপ্ত.buildহয় বেশিরভাগই জন্য একটি alias .new। এটি রেল 3 এ এক উপায়ে এবং অন্য উপায়ে <3.xতবে সবচেয়ে গুরুত্বপূর্ণ অংশটি হ'ল দুটি পদ্ধতির has_manyস্বয়ংক্রিয়ভাবে সংযোগ স্থাপনের জন্য এই পদ্ধতিগুলিকে একটি সমিতি ( ইত্যাদি) মাধ্যমে কল করা যেতে পারে ।
যদিও এটি সঠিক যে createকল করে newএবং তারপরে saveফিরে আসার মানগুলির মধ্যে দুটি বিকল্পের মধ্যে একটি বড় পার্থক্য রয়েছে।
Saveডেটাবেসে সাফল্যের সাথে সেভ করা হয়েছিল কিনা তার উপর নির্ভর করে trueবা ফেরত দেয় false। এটি উপরের প্রশ্নের প্রথম উদাহরণ অনুযায়ী প্রবাহ নিয়ন্ত্রণের জন্য ব্যবহার করা যেতে পারে।
Createবস্তুটি সংরক্ষণ করা হয়েছিল কিনা তা নির্বিশেষে মডেলটি ফিরিয়ে দেবে। উপরের কোডটির উপর এটি এর শীর্ষ শাখায় জড়িত রয়েছেif বিবৃতিটির সর্বদা কার্যকর করা হবে এমনকি যদি বস্তুটির বৈধতা ব্যর্থ হয় এবং সংরক্ষণ না হয়।
আপনি যদি createব্রাঞ্চিং যুক্তি দিয়ে ব্যবহার করেন তবে আপনি নীরব ব্যর্থতার ঝুঁকিতে রয়েছেন যা আপনি যদি new+ ব্যবহার করেন তবে তা নয় save।
create! রেকর্ডটি অবৈধ হলে এটি উত্থাপিত এবং ব্যতিক্রম হিসাবে একই ইস্যুতে ভুগবে না।
createযেখানে বিকল্প নিয়ন্ত্রকসমূহে উপযোগী হতে পারে respond_withএপিআই (JSON / XML) প্রতিক্রিয়া জন্য ব্যবহার করা হয়। এক্ষেত্রে অবজেক্টে ত্রুটির উপস্থিতি ত্রুটিগুলির স্থিতি হিসাবে প্রতিক্রিয়াতে ফিরিয়ে আনবে unprocessable_entity, যা আপনি এপিআই থেকে ঠিক তেমন চান।
আমি সর্বদা এইচটিএমএলের জন্য new+ saveবিকল্পটি ব্যবহার করব, বিশেষত যদি আপনি প্রবাহ নিয়ন্ত্রণের জন্য ফেরতের মানের উপর নির্ভর করেন।
আমি উপরের উত্তরগুলি দ্বিতীয় করব। এছাড়াও create, falseএকটি যুক্তি হিসাবে আপনি পাস করতে পারেন হিসাবে পাস করতে পারে না save। falseযুক্তি হিসাবে পাস করা সমস্ত রেলের বৈধতা এড়িয়ে যাবে