`After_create` এবং` after_save` এর মধ্যে পার্থক্য কী এবং কখন ব্যবহার করতে হবে?


124

হয় after_createএবং after_saveপ্রতি কার্যকারিতা হিসাবে একই?

আমি কোনও অ্যাকাউন্ট তৈরির পরে কোনও ইমেলের ইমেল দিয়ে একটি অপারেশন করতে চাই।

ডাটাবেসে সেভ হয়ে গেলে আমি সেই অপারেশনটি করতে চাই।

কোনটি ব্যবহার করা ভাল: after_createবা after_save?

উত্তর:


212

after_create শুধুমাত্র একবারে কাজ করে - রেকর্ডটি প্রথম তৈরি হওয়ার ঠিক পরে।

after_save প্রতিবার আপনি বস্তুটি সংরক্ষণ করার সময় কাজ করে - এমনকি আপনি এটি বহু বছর পরে আপডেট করে দিলেও

সুতরাং আপনি যদি এই ইমেল অপারেশনটি করতে চান তবে কেবল একবার (এবং তারপরে আর কখনও হবে না) তবে ব্যবহার করুন after_create

আপনি যদি প্রতিবার অবজেক্টটি সংরক্ষিত হয় তা করতে চান , তবে এটি ভিতরে করুনafter_save


2
পাঠকদের মনে রাখা উচিত, ডক্স অনুসারে , অ্যাক্টিভেকর্ডগুলি update_allকোনও কলব্যাকের ডাক দেয় না, সহafter_*
ইউজার 2426679

93

ডক্স থেকে :

after_create()

পরে বলা হয় Base.saveনতুন যে বস্তু এখনো সংরক্ষিত হয়নি (কোন রেকর্ড থাকে) উপর।

after_save()

এর পরে ডাকা হয় Base.save (এটি সংরক্ষণ বা আপডেট আপডেট করা হোক না কেন)।


1
after_save()

আপনার যখন প্রায়শই প্রায়শই সংরক্ষণ না করে এমন মডেলগুলি সংরক্ষণ করতে হয় যখন সূক্ষ্মভাবে কাজ করে। রেকর্ড ঘন ঘন এই বিশেষ উদাহরণের জন্য এটি ব্যবহার করার পরামর্শ দেওয়া হবে

 after_commit()

_অনুষ্ঠানের পরে ক্রিয়াকলাপ সম্পাদনের আগে মডেলটি ডাটাবেজে সংরক্ষণ করা হয়েছে তা নিশ্চিত করুন : গণনা_ক্রেডিট_স্কোর

def calculate_credit_score
     #Call a Cron job
end

আপনি ব্যবহার করার পরামর্শ দিচ্ছেন after_commitতবে কেন তা ব্যাখ্যা করবেন না। আপনি দয়া করে বিস্তারিত বলতে পারেন? নোট করুন যে after_commitতৈরি করুন, আপডেট করুন এবং ধ্বংস করুন runs দস্তাবেজ: apidock.com/rails/AtivetiveRecord/Transferences/ClassMethods/… সুতরাং after_saveরেকর্ডটি নষ্ট করার পরে আপনি যে ক্রোন_জবকে সত্যিই কল করতে চান সেই একই আচরণ নয় ? বা অপ্স ক্ষেত্রে, এখন মুছে ফেলা ব্যবহারকারীর জন্য একটি ইমেল প্রেরণ করবেন? ব্যবহার করে সতর্ক থাকুনafter_commit
rmcsharry

after_commitসেই সিআরইউডি অপারেশনগুলিতে চলে, সুতরাং যদি তার ক্ষেত্রে ইমেলটি প্রায়শই আপডেট হয় তবে নির্দিষ্ট কলব্যাকের জন্য ক্রিয়াটি একত্রিত করা আরও সহজ হবে। আমার ক্ষেত্রে আমি ব্যবহার করেছিafter_commit : calculate_profile_update, on: :update
9:55 এ পেনসিয়েন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.