มีafter_create
และafter_save
เช่นเดียวกับการทำงานต่อ?
ฉันต้องการดำเนินการกับอีเมลของผู้ใช้หลังจากสร้างบัญชีแล้ว
ฉันต้องการดำเนินการดังกล่าวเมื่อบันทึกไว้ในฐานข้อมูล
ที่นิยมใช้: after_create
หรือafter_save
?
มีafter_create
และafter_save
เช่นเดียวกับการทำงานต่อ?
ฉันต้องการดำเนินการกับอีเมลของผู้ใช้หลังจากสร้างบัญชีแล้ว
ฉันต้องการดำเนินการดังกล่าวเมื่อบันทึกไว้ในฐานข้อมูล
ที่นิยมใช้: after_create
หรือafter_save
?
คำตอบ:
after_create
ใช้งานได้เพียงครั้งเดียว - หลังจากสร้างเรกคอร์ดครั้งแรก
after_save
ทำงานทุกครั้งที่คุณบันทึกวัตถุแม้ว่าคุณจะเพิ่งอัปเดตในอีกหลายปีต่อมา
ดังนั้นถ้าคุณต้องการที่จะดำเนินการในอีเมลฉบับนี้เพียงครั้งเดียว (แล้วไม่เคยอีกครั้ง) after_create
จากนั้นใช้
ถ้าคุณต้องการทำทุกครั้งที่บันทึกวัตถุให้ทำในafter_save
จากเอกสาร :
after_create()
ถูกเรียกตาม
Base.save
อ็อบเจ็กต์ใหม่ที่ยังไม่ได้บันทึก (ไม่มีบันทึก)
after_save()
ถูกเรียกหลังจาก
Base.save
(ไม่ว่าจะสร้างหรืออัปเดตบันทึก)
after_save()
ใช้งานได้ดีเมื่อคุณต้องบันทึกโมเดลที่ไม่ได้บันทึกบ่อยนัก สำหรับตัวอย่างเฉพาะของการเปลี่ยนแปลงบันทึกบ่อยๆขอแนะนำให้ใช้
after_commit()
ตรวจสอบให้แน่ใจว่าโมเดลถูกบันทึกไว้ในฐานข้อมูลก่อนที่จะดำเนินการดำเนินการ after_commit: คำนวณ_credit_score
def calculate_credit_score
#Call a Cron job
end
after_commit
แต่ไม่อธิบายว่าทำไม ช่วยอธิบายให้ละเอียดหน่อยได้ไหม? โปรดทราบว่าafter_commit
ทำงานในการสร้างอัปเดตและทำลาย Docs: apidock.com/rails/ActiveRecord/Transactions/ClassMethods/…ดังนั้นจึงไม่เป็นพฤติกรรมเดียวกันกับที่after_save
คุณต้องการเรียก cron_job หลังจากทำลายบันทึกหรือไม่? หรือในกรณีการดำเนินการส่งอีเมลไปยังผู้ใช้ที่ถูกลบไปแล้ว? ระวังการใช้after_commit
after_commit
ทำงานบนการดำเนินการ CRUD เหล่านั้นดังนั้นหากในกรณีของเขาอีเมลได้รับการอัปเดตบ่อยครั้งการรวมการดำเนินการสำหรับการโทรกลับเฉพาะจะง่ายกว่า ในกรณีของฉันฉันใช้after_commit : calculate_profile_update, on: :update
update_all
ไม่เรียกใช้การโทรกลับใด ๆ รวมถึงafter_*