Saya memiliki model ActiveRecord yang kembali truedari valid?(dan .errors kosong), tetapi kembali falsedari save(). Jika contoh model valid, bagaimana saya bisa mengetahui apa yang menyebabkan penyimpanan gagal?
Saya memiliki model ActiveRecord yang kembali truedari valid?(dan .errors kosong), tetapi kembali falsedari 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::RecordNotSaveditulah yang ingin Anda selamatkan.
.savekegagalan 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