Dönen bir ActiveRecord modeli var true
gelen valid?
(ve .errors boş), ancak dönen false
gelen save()
. Model örneği geçerliyse, kaydetmenin başarısız olmasına neyin sebep olduğunu nasıl öğrenebilirim?
Dönen bir ActiveRecord modeli var true
gelen valid?
(ve .errors boş), ancak dönen false
gelen save()
. Model örneği geçerliyse, kaydetmenin başarısız olmasına neyin sebep olduğunu nasıl öğrenebilirim?
Yanıtlar:
Tüm geri aramalarınızı kontrol edin.
Modelde bir dizi değişiklik yaptıktan sonra başarısız olan "after_validate" yöntemine sahip olduğum ve "after_validate" yöntemine benzer bir sorun yaşadım. Model geçerliydi ancak "after_validate" yanlış döndürüyordu, bu yüzden eğer kullandıysam model.valid
doğru dedim, ancak daha sonra kaydedersem bana doğrulama hataları verdi (after_validate geri aramasından geçti). Bu garipti.
Uygulama izlemesine bakın ve hangi kod satırının istisnayı artırdığını görebilmelisiniz.
"Hey! That's MY fake leg!" # Believe it or not, this is important
. Bunu yapacağımdan değil. ;)
true.tap { do_something }
Patlama versiyonunu save!
(sonunda bir ünlem işaretiyle) kullanmayı ve ortaya çıkan hatayı incelemeyi deneyin .
save!
yükseltebilir ActiveRecord::RecordInvalid
(doğrulamaları çalıştırdığı için) veya ActiveRecord::RecordNotSaved
bu yüzden kurtarmak isteyeceğiniz şey budur.
.save
doğrulamaya bağlı olmayan arızaların nasıl teşhis edileceğine dair temel soruya en az tatmin edici olmayan cevaptır . "En az tatmin edici olmayan" nitelik, bu yanıta değil, Rails'e atıfta bulunur.
Eğer @user.save
(örneğin) dönerse false
, tüm hataları almak için bunu çalıştırın:
@user.errors.full_messages
Evet, tüm önceki * * geri aramalarımda doğru döndüğümden emin olarak bu sorunu çözdüm ve sonra çalışmaya başladım :)
Yaşadığım sorun, modele doğrulamayı eklemeyi unutmuş olmamdı.
class ContactGroup < ActiveRecord::Base
validates_presence_of :name
end