Bir istisnayı kurtarmanın ve işlemeye devam etmenin doğru yolu nedir? Klasörler ve Öğeler içeren bir uygulamamız var. Bu tablonun yinelenen öğe/klasör kombinasyonları olmadığından emin olmak için benzersiz bir kısıtlaması vardır. Kullanıcı birkaç kez aynı klasöre bir öğe eklemeyi denerse, açıkça ek satırların eklenmesini istemiyorum; ama ben de işlemeyi durdurmak istemiyorum.Raylar 3 yok sayılır Postgres benzersiz kısıtlama istisnası
Postgres otomatik olarak benzersiz kısıtlamayı ihlal edilen bir durum atar, bu yüzden aşağıdaki gibi denetleyicisi bunu görmezden çalıştı: Bu tek eklemeler üzerinde çalışıyor
rescue PG::Error, :with => :do_nothing
def do_nothing
end
. Denetleyici, render'i 200 durum koduyla yürütür. Ancak, bir döngüde yığın ekler yapan başka bir yönteme sahibim. Bu yöntemde, denetleyici, ilk yinelenen satırla karşılaştığında döngüden çıkar, istediğim bu değil. İlk başta, döngünün geri alınacak bir işlemin sarılmış olması gerektiğini düşündüm, ancak bu değil - yinelenen tüm satırlar eklensin. Kısıtlama istisnasını görmezden gelmek ve bir sonraki maddeye geçmek istiyorum. PG :: Error istisnasının bunu kesintiye uğratmasını nasıl engellerim?
Teşekkürler, mu. İşe yaramış gibi görünüyor. Rescue_with olarak adlandırılan do_nothing yöntemine 'next' yerleştirmeyi denedim, ancak bu bana bir hata verdi. Her durumda, kesinlikle bir PG :: Hatası ve doğrudan db ile konuşmuyorum. Özel bir SQL eki içermeyen sade bir eski habtm birleşim tablosu. Belki de ActiveRecord :: RecordNotUnique sadece model tablolara çağrılır? –
Çok erken konuştum. Tekrar test edildi ve kesinlikle karşılaştığı ilk kopyadaki döngüyü sonlandırıyor. İlginç olan şu ki, kontrolör yönteminde başlangıç / kurtarma bloğunu ekler ve kontrol cihazından kurtarma programını kaldırırsam istisna hiç bir şekilde yakalanmaz. Yani, bir sebepten dolayı, bu görünüşte hiç kontrolör seviyesinde yakalanmadı. –
Denetleyici düzeyinde yakalamak istemezsiniz, bu istisna hakkında bir şeyler yapabileceğiniz yerden çok uzaktır. Kodunuz neye benziyor? –