.Build, .create এবং .create এর মধ্যে পার্থক্য! এবং কখন তাদের ব্যবহার করা উচিত?


167

সুতরাং আমি লোকগুলি। বিল্ড, .ক্রিয়েট এবং .ক্রিয়েট ব্যবহার করে দেখছি! তাদের নিয়ন্ত্রকদের মধ্যে আরও এবং আরও ইদানীং। কেবলমাত্র নতুন এবং প্যারাম'ড অবজেক্টটি ব্যবহার করুন এবং তারপরে সংরক্ষণ করুন কি সেভ করবেন? সেখানে কি কুফর আছে? এই অন্যান্য পদ্ধতি ব্যবহার করে কি উপকার পাওয়া যায়?

উত্তর:


233

কয়েকটি পার্থক্য রয়েছে, তবে সেগুলি বড় নয়:

  1. .create.newদ্বারা অনুসরণ সমতুল্য.save । এটি কেবল আরও সংক্ষিপ্ত।
  2. .create!এটি .newঅনুসরণ করার সমতুল্য .save!(সংরক্ষণ ব্যর্থ হলে একটি ত্রুটি নিক্ষেপ করে)। এটি কেবল একটি সামান্য বিট সংক্ষিপ্ত
  3. আমি মনে করি .buildহয় বেশিরভাগই জন্য একটি alias .new। এটি রেল 3 এ এক উপায়ে এবং অন্য উপায়ে <3.x

তবে সবচেয়ে গুরুত্বপূর্ণ অংশটি হ'ল দুটি পদ্ধতির has_manyস্বয়ংক্রিয়ভাবে সংযোগ স্থাপনের জন্য এই পদ্ধতিগুলিকে একটি সমিতি ( ইত্যাদি) মাধ্যমে কল করা যেতে পারে ।


1
আমি এটিকে সবচেয়ে সঠিক উত্তর হিসাবে বেছে নিয়েছি কারণ তাদের সাথে সম্পর্কিত মডেলগুলিকে সংযুক্ত করতে সক্ষম হওয়ার উল্লেখ সম্পর্কে - এটি একটি নতুন এবং .সেভ ব্যবহার করে আমি মনে করি একটি আকর্ষণীয় এবং গুরুত্বপূর্ণ পার্থক্য। যা একটু অতিরিক্ত কাজ লাগে। ধন্যবাদ।
টিম নাইট

11
3-এ মাইনর স্পষ্টকরণ - বিল্ডটি নতুনের চেয়ে কিছু বেশি করে - এটি সমিতির লিঙ্কটিও সেট করে।
দুটি বিট গ্যাংস্টার

116
বিল্ড নতুন থেকে পৃথক। তবে পার্থক্যটি এটি নয় যে এটি অ্যাসোসিয়েশন লিঙ্কটি সেট করে (নতুন এটিও নতুন উদাহরণের জন্য করে)। পার্থক্যটি হ'ল বিল্ড নতুন কলারের সাথে কলারকে জনপ্রিয় করে তোলে, তবে নতুন করে না। সুতরাং উদাহরণস্বরূপ: Wall.posts.new আপনাকে আপনার ওয়াল এর সাথে যুক্ত একটি নতুন পোস্ট দেয় তবে ওয়াল.পাস্টগুলি এই কলের পরেও খালি রয়েছে। ওয়াল.পাস্টস.ইউবিল্ড আপনাকে দেয়ালের সাথে যুক্ত একটি নতুন পোস্ট দেয় এবং আপনার ওয়াল.পাস্টগুলিতে এখন একটি পোস্ট রয়েছে।
আমিন আরিয়ানা

3
কোনও বিশেষ কার্যকারিতা ছাড়াই এখন এটি কি কেবল একটি উপনাম নয়?
গ্যাব্রিয়েল সিরুল্লি

14
4 রেলগুলিতে, আমি কেবল কনসোলে চেক করেছি। প্রাচীর.পোস্ট.নিউ এবং ওয়াল.পাস্ট.বিল্ড উভয়ই ঠিক একইভাবে প্রাচীরের অবজেক্টকে পপুলেশন করছে। দেয়াল.পাস্ট.নু'র পরে মানে, ওয়াল.পাস্টগুলি খালি খালি নয় আমিনের মন্তব্যে দাবি করা হয়েছে।
বট

35

যদিও এটি সঠিক যে createকল করে newএবং তারপরে saveফিরে আসার মানগুলির মধ্যে দুটি বিকল্পের মধ্যে একটি বড় পার্থক্য রয়েছে।

Saveডেটাবেসে সাফল্যের সাথে সেভ করা হয়েছিল কিনা তার উপর নির্ভর করে trueবা ফেরত দেয় false। এটি উপরের প্রশ্নের প্রথম উদাহরণ অনুযায়ী প্রবাহ নিয়ন্ত্রণের জন্য ব্যবহার করা যেতে পারে।

Createবস্তুটি সংরক্ষণ করা হয়েছিল কিনা তা নির্বিশেষে মডেলটি ফিরিয়ে দেবে। উপরের কোডটির উপর এটি এর শীর্ষ শাখায় জড়িত রয়েছেif বিবৃতিটির সর্বদা কার্যকর করা হবে এমনকি যদি বস্তুটির বৈধতা ব্যর্থ হয় এবং সংরক্ষণ না হয়।

আপনি যদি createব্রাঞ্চিং যুক্তি দিয়ে ব্যবহার করেন তবে আপনি নীরব ব্যর্থতার ঝুঁকিতে রয়েছেন যা আপনি যদি new+ ব্যবহার করেন তবে তা নয় save

create! রেকর্ডটি অবৈধ হলে এটি উত্থাপিত এবং ব্যতিক্রম হিসাবে একই ইস্যুতে ভুগবে না।

createযেখানে বিকল্প নিয়ন্ত্রকসমূহে উপযোগী হতে পারে respond_withএপিআই (JSON / XML) প্রতিক্রিয়া জন্য ব্যবহার করা হয়। এক্ষেত্রে অবজেক্টে ত্রুটির উপস্থিতি ত্রুটিগুলির স্থিতি হিসাবে প্রতিক্রিয়াতে ফিরিয়ে আনবে unprocessable_entity, যা আপনি এপিআই থেকে ঠিক তেমন চান।

আমি সর্বদা এইচটিএমএলের জন্য new+ saveবিকল্পটি ব্যবহার করব, বিশেষত যদি আপনি প্রবাহ নিয়ন্ত্রণের জন্য ফেরতের মানের উপর নির্ভর করেন।


6

# ক্রিয়েট নতুন এবং সংরক্ষণের সংক্ষিপ্ত সংস্করণ। #সৃষ্টি! বৈধতা ইতিবাচক না হলে ব্যতিক্রম ছুঁড়ে দিচ্ছে।


5

আমি উপরের উত্তরগুলি দ্বিতীয় করব। এছাড়াও create, falseএকটি যুক্তি হিসাবে আপনি পাস করতে পারেন হিসাবে পাস করতে পারে না savefalseযুক্তি হিসাবে পাস করা সমস্ত রেলের বৈধতা এড়িয়ে যাবে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.