Object.update_attribute(:only_one_field, "Some Value")
Object.update_attributes(:field1 => "value", :field2 => "value2", :field3 => "value3")
Kedua hal ini akan memperbarui objek tanpa harus secara eksplisit memberi tahu AR untuk memperbarui.
API Rails mengatakan:
untuk update_attribute
Memperbarui atribut tunggal dan menyimpan catatan tanpa melalui prosedur validasi normal. Ini sangat berguna untuk bendera boolean pada catatan yang ada. Metode update_attribute reguler di Base diganti dengan ini ketika modul validasi dicampur, yang secara default.
untuk update_attributes
Memperbarui semua atribut dari Hash yang dilewatkan dan menyimpan catatan. Jika objek tidak valid, penyimpanan akan gagal dan false akan dikembalikan.
Jadi jika saya tidak ingin objek divalidasi saya harus menggunakan update_attribute. Bagaimana jika saya memiliki pembaruan ini pada before_save, apakah itu stackoverflow?
Pertanyaan saya adalah apakah update_attribute juga memotong sebelum menyimpan atau hanya validasi.
Juga, apa sintaks yang benar untuk mengirimkan hash ke update_attributes ... lihat contoh saya di atas.
before_save
panggilan balik). Fe bukannya update_attribute(:discount, 0.1) if amount > 100
Anda bisa lakukan discount = 0.1 if amount > 100
. update_attribute
panggilan save
pada objek, yang tidak perlu dalam kasus ini, karena pernyataan itu ada di dalam before_save
panggilan balik dan akan tetap disimpan. Saya harap itu masuk akal.
update_attribute
pernyataan ke dalambefore_save
callback? Saya tidak bisa memikirkan alasan yang bagus untuk ini.