คุณช่วยอธิบายรายละเอียดเกี่ยวกับการเรียกกลับ:before_save
และ:before_create
Ruby on Rails ได้อย่างไรและพวกเขาต้องทำอย่างไรกับการตรวจสอบความถูกต้องของ Rails? การตรวจสอบเกิดขึ้นหลังจาก:before_save
หรือ:before_create
ไม่?
คุณช่วยอธิบายรายละเอียดเกี่ยวกับการเรียกกลับ:before_save
และ:before_create
Ruby on Rails ได้อย่างไรและพวกเขาต้องทำอย่างไรกับการตรวจสอบความถูกต้องของ Rails? การตรวจสอบเกิดขึ้นหลังจาก:before_save
หรือ:before_create
ไม่?
คำตอบ:
ในการดำเนินการสร้างภายใต้ Rails มีการเรียกกลับหกครั้งก่อนการดำเนินการฐานข้อมูลและสองครั้งหลังจากนั้น ตามลำดับเหล่านี้คือ:
before_validation
before_validation_on_create
after_validation
after_validation_on_create
before_save
before_create
after_create
after_save
การดำเนินการอัปเดตมีชุดเดียวกันทั้งหมดยกเว้นอ่านupdate
แทนcreate
ทุกที่ (และอัปเดตแทนINSERT )
จากนี้คุณจะเห็นว่าการตรวจสอบจะดำเนินการก่อนbefore_save
และการbefore_create
เรียกกลับ
เกิดขึ้นเล็กน้อยก่อนbefore_save
before_create
เพื่อความรู้ของฉันที่ดีที่สุดไม่มีอะไรเกิดขึ้นระหว่างพวกเขา แต่before_save
จะเริ่มการอัปเดตในขณะที่before_create
จะสร้างเฉพาะใน Creates
after_save
หรือafter_create
อย่างไร
after_save
หรือafter_create
โทรกลับself
เป็นบันทึกที่เพิ่งบันทึกตามที่มีอยู่หลังจากบันทึก ที่มีสาขา autogenerated ชอบid
, ,created_at
updated_at
before_create
หมายถึงวัตถุใหม่ที่ถูกบันทึกลงในฐานข้อมูลไม่ใช่create
วิธีการจริงที่ถูกเรียก ดังนั้นbefore_create
สามารถยิงได้แม้กระทั่งจากsave
วิธีการ
before_save
ที่ 3 และbefore_create
5
before_save
ถูกเรียกทุกครั้งที่วัตถุถูกบันทึก ดังนั้นสำหรับวัตถุใหม่และที่มีอยู่ (สร้างและอัปเดตการกระทำ)
before_create
ก่อนการสร้างเท่านั้น ดังนั้นสำหรับวัตถุใหม่เท่านั้น (สร้างการกระทำ)
before_create
VS before_save :on => :create
บางครั้งคุณต้องระวังลำดับของการเรียกกลับ
ดูที่นี่สำหรับรายละเอียดเพิ่มเติม:
http://pivotallabs.com/activerecord-callbacks-autosave-before-this-and-that-etc/
before_save :on => :create
ไม่ทำงาน (อย่างน้อยบนราง 3.2)
before_save :generate_api_key, :if => :new_record?
before_validation_on_create
และafter_validation_on_create
จะถูกลบออก ณ Rails 3แทนที่จะใช้before_validation
และตามลำดับพร้อมกับตัวเลือกafter_validation
:on => :create