Dönen bir ActiveRecord modeli var truegelen valid?(ve .errors boş), ancak dönen falsegelen 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 truegelen valid?(ve .errors boş), ancak dönen falsegelen 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.validdoğ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::RecordNotSavedbu yüzden kurtarmak isteyeceğiniz şey budur.
.savedoğ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