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?
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.
"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.
save!
dapat menimbulkan ActiveRecord::RecordInvalid
(karena menjalankan validasi) atau ActiveRecord::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) kembali false
, maka jalankan ini untuk mendapatkan semua kesalahan:
@user.errors.full_messages
Ya, saya memperbaiki masalah ini dengan memastikan saya mengembalikan true di semua callback before_ * saya kemudian mulai berfungsi :)
Masalah yang saya hadapi adalah saya lupa menambahkan validasi ke model.
class ContactGroup < ActiveRecord::Base
validates_presence_of :name
end