Bisakah Anda menjelaskan secara rinci apa itu callback Ruby :before_save
dan :before_create
Rails, dan apa hubungannya dengan validasi Rails? Apakah validasi terjadi setelah :before_save
atau :before_create
?
Bisakah Anda menjelaskan secara rinci apa itu callback Ruby :before_save
dan :before_create
Rails, dan apa hubungannya dengan validasi Rails? Apakah validasi terjadi setelah :before_save
atau :before_create
?
Jawaban:
Dalam operasi pembuatan di bawah Rails, ada enam callback sebelum operasi database, dan dua setelahnya. Secara berurutan, ini adalah:
before_validation
before_validation_on_create
after_validation
after_validation_on_create
before_save
before_create
after_create
after_save
Operasi pembaruan memiliki set yang sama persis, kecuali baca update
alih-alih di create
mana - mana (dan UPDATE alih-alih INSERT ).
Dari ini, Anda dapat melihat bahwa validasi dilakukan sebelum before_save
dan before_create
callback.
The before_save
terjadi sedikit sebelum before_create
. Sejauh pengetahuan saya, tidak ada yang terjadi di antara mereka; tetapi before_save
juga akan diaktifkan pada operasi Perbarui, sementara before_create
hanya akan menembak pada Create.
after_save
atau after_create
?
after_save
atau after_create
callback, self
adalah catatan yang baru saja disimpan, seperti yang ada setelah simpan. Itu bidang termasuk software otomatis seperti id
, created_at
, updated_at
.
before_create
mengacu pada objek baru yang disimpan ke database, bukan create
metode aktual yang dipanggil. Dengan demikian, before_create
masih bisa dipecat bahkan dari save
metode.
before_save
3, dan before_create
5.
before_save
disebut setiap kali suatu objek disimpan. Jadi untuk objek baru dan yang sudah ada. (buat dan perbarui tindakan)
before_create
hanya 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 => :create
tidak bekerja (setidaknya pada rel 3.2)
before_save :generate_api_key, :if => :new_record?
before_validation_on_create
danafter_validation_on_create
dihapus pada Rails 3 , sebagai gantinya gunakanbefore_validation
danafter_validation
masing-masing dengan opsi:on => :create
.