রুবে অন রেলস কলব্যাক, এর মধ্যে পার্থক্য কী: পূর্ব_সেব এবং: আগে_ক্রিট?


183

আপনি কীভাবে বিশদটি ব্যাখ্যা করতে পারবেন যে :before_save:before_createরবি অন রেল কলব্যাকগুলি কী এবং তাদের কী কী আছে তার ব্যর্থতার সাথে বৈধতা যাচাই করার জন্য? বৈধতা পরে :before_saveবা ঘটে :before_create?

উত্তর:


363

রেলের অধীনে একটি ক্রিয়েশন অপারেশনে, ডাটাবেস অপারেশনের আগে ছয়টি কলব্যাক এবং তার পরে দুটি রয়েছে। ক্রমানুসারে, এগুলি হ'ল:

  1. before_validation
  2. before_validation_on_create
  3. after_validation
  4. after_validation_on_create
  5. before_save
  6. before_create

    ডেটাবেস ইনসার্ট
  7. after_create
  8. after_save

আপডেট ক্রিয়াকলাপগুলি ঠিক একই সেট রয়েছে, সর্বত্র updateপরিবর্তিত পড়ুন create(এবং INSERT এর পরিবর্তে আপডেট )।

এ থেকে, আপনি দেখতে পাচ্ছেন যে বৈধতা before_saveএবং before_createকলব্যাকের আগে সঞ্চালিত হয় ।

এর before_saveসামান্য আগে ঘটে before_create। আমার জ্ঞানের সর্বোত্তম, তাদের মধ্যে কিছুই ঘটে না; তবে before_saveআপডেট ক্রিয়াকলাপগুলিতেও before_createগুলি চালানো হবে , তবে কেবল ক্রিয়েটগুলিতেই আগুন লাগবে।


27
before_validation_on_createএবং after_validation_on_createএর পরিবর্তে যথাক্রমে বিকল্প before_validationএবং after_validationযথাযথভাবে ব্যবহার করুন এবং রেল 3 হিসাবে সরানো হবে :on => :create
সূর্য

আপনি কিভাবে রেকর্ড যে শুধু যখন ব্যবহার করে তৈরি করা হয়েছিল পড়ুন হবে after_saveবা after_create?
বেকারম্যান

@backackman - after_saveবা after_createকলব্যাকে, selfরেকর্ডটি সবেমাত্র সংরক্ষিত ছিল, কারণ এটি সংরক্ষণের পরে উপস্থিত রয়েছে। অন্তর্ভুক্ত স্বতঃজেনারেট ক্ষেত্র চাই যে id, created_at, updated_at
চৌলেট

এছাড়াও মনে রাখবেন before_createএকটি নতুন অবজেক্টটি ডাটাবেসে সংরক্ষণ করা বোঝায়, প্রকৃত createপদ্ধতিটি বলা হচ্ছে না । সুতরাং, before_createএখনও saveপদ্ধতি থেকে বরখাস্ত করা যেতে পারে ।
স্টিভ

1
@ রডস - এর, না? দস্তাবেজগুলি এখনও before_saveতৃতীয় এবং before_create5 তম তালিকাভুক্ত করে ।
চৌলেট

136

before_saveপ্রতিবার কোনও বস্তু সংরক্ষণ করা হয়। নতুন এবং বিদ্যমান বস্তুর জন্য তাই। (ক্রিয়া তৈরি এবং আপডেট করুন)

before_createশুধুমাত্র সৃষ্টির আগে। সুতরাং শুধুমাত্র নতুন বস্তুর জন্য (ক্রিয়া তৈরি করুন)


3

before_create বনাম before_save :on => :create

কখনও কখনও আপনাকে কলব্যাকের ক্রমটি সম্পর্কে সতর্ক থাকতে হবে

এখানে আরো বিস্তারিত জানার জন্য দেখুন: http://pivotallabs.com/activerecord-callbacks-autosave-before-this-and-that-etc/


5
before_save :on => :createকাজ করে না (কমপক্ষে
রেলপথে

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