Bisakah Anda menjelaskan secara rinci apa itu callback Ruby :before_savedan :before_createRails, dan apa hubungannya dengan validasi Rails? Apakah validasi terjadi setelah :before_saveatau :before_create?
Bisakah Anda menjelaskan secara rinci apa itu callback Ruby :before_savedan :before_createRails, dan apa hubungannya dengan validasi Rails? Apakah validasi terjadi setelah :before_saveatau :before_create?
Jawaban:
Dalam operasi pembuatan di bawah Rails, ada enam callback sebelum operasi database, dan dua setelahnya. Secara berurutan, ini adalah:
before_validationbefore_validation_on_createafter_validationafter_validation_on_createbefore_savebefore_create
after_createafter_saveOperasi pembaruan memiliki set yang sama persis, kecuali baca updatealih-alih di createmana - mana (dan UPDATE alih-alih INSERT ).
Dari ini, Anda dapat melihat bahwa validasi dilakukan sebelum before_savedan before_createcallback.
The before_saveterjadi sedikit sebelum before_create. Sejauh pengetahuan saya, tidak ada yang terjadi di antara mereka; tetapi before_savejuga akan diaktifkan pada operasi Perbarui, sementara before_createhanya akan menembak pada Create.
after_saveatau after_create?
after_saveatau after_createcallback, selfadalah catatan yang baru saja disimpan, seperti yang ada setelah simpan. Itu bidang termasuk software otomatis seperti id, created_at, updated_at.
before_createmengacu pada objek baru yang disimpan ke database, bukan createmetode aktual yang dipanggil. Dengan demikian, before_createmasih bisa dipecat bahkan dari savemetode.
before_save3, dan before_create5.
before_savedisebut setiap kali suatu objek disimpan. Jadi untuk objek baru dan yang sudah ada. (buat dan perbarui tindakan)
before_createhanya sebelum penciptaan. Jadi hanya untuk objek baru (buat aksi)
before_create vs. before_save :on => :create
Terkadang Anda harus berhati-hati dengan urutan panggilan balik
Lihat di sini untuk perincian lebih lanjut:
http://pivotallabs.com/activerecord-callbacks-autosave-before-this-and-that-etc/
before_save :on => :createtidak bekerja (setidaknya pada rel 3.2)
before_save :generate_api_key, :if => :new_record?
before_validation_on_createdanafter_validation_on_createdihapus pada Rails 3 , sebagai gantinya gunakanbefore_validationdanafter_validationmasing-masing dengan opsi:on => :create.