Saya memiliki model ActiveRecord yang kembali true
dari valid?
(dan .errors kosong), tetapi kembali false
dari save()
. Jika contoh model valid, bagaimana saya bisa mengetahui apa yang menyebabkan penyimpanan gagal?
91
Saya memiliki model ActiveRecord yang kembali true
dari valid?
(dan .errors kosong), tetapi kembali false
dari save()
. Jika contoh model valid, bagaimana saya bisa mengetahui apa yang menyebabkan penyimpanan gagal?
Jawaban:
Periksa semua panggilan balik Anda.
Saya mengalami masalah seperti ini di mana saya memiliki dan metode "after_validate" yang gagal setelah saya membuat banyak perubahan pada model. Model itu valid tetapi "after_validate" mengembalikan false, jadi jika saya menggunakannya
model.valid
, katanya benar, tetapi jika saya menyimpannya, model itu memberi saya kesalahan validasi (diteruskan dari callback after_validate). Aneh sekali.Lihat jejak aplikasi dan Anda akan dapat melihat baris kode mana yang memunculkan pengecualian.
sumber
"Hey! That's MY fake leg!" # Believe it or not, this is important
. Bukannya saya akan melakukan itu. ;)true.tap { do_something }
Coba gunakan versi bang
save!
(dengan tanda seru di akhir) dan periksa kesalahan yang dihasilkan.sumber
save!
dapat menimbulkanActiveRecord::RecordInvalid
(karena menjalankan validasi) atauActiveRecord::RecordNotSaved
itulah yang ingin Anda selamatkan..save
kegagalan yang bukan karena validasi. Kualifikasi "paling tidak memuaskan" mengacu pada Rails, bukan jawaban ini.Jika
@user.save
(misalnya) kembalifalse
, maka jalankan ini untuk mendapatkan semua kesalahan:@user.errors.full_messages
sumber
Ya, saya memperbaiki masalah ini dengan memastikan saya mengembalikan true di semua callback before_ * saya kemudian mulai berfungsi :)
sumber
Masalah yang saya hadapi adalah saya lupa menambahkan validasi ke model.
class ContactGroup < ActiveRecord::Base validates_presence_of :name end
sumber