উত্তর:
কয়েকটি পার্থক্য রয়েছে, তবে সেগুলি বড় নয়:
.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
যুক্তি হিসাবে পাস করা সমস্ত রেলের বৈধতা এড়িয়ে যাবে