sql >> Databáze >  >> RDS >> PostgreSQL

Rails 3 ignorují výjimku jedinečného omezení Postgres

Obecně by vaše zpracování výjimek mělo být co nejblíže k chybě, že můžete s výjimkou udělat něco rozumného. Ve vašem případě budete chtít svou rescue uvnitř vaší smyčky, například:

stuff.each do |h|
  begin
    Model.create(h)
  rescue ActiveRecord::RecordNotUnique => e
    next if(e.message =~ /unique.*constraint.*INDEX_NAME_GOES_HERE/)
    raise
  end
end

Pár zajímavostí:

  1. Porušením omezení v databázi získáte ActiveRecord::RecordNotUnique chyba spíše než základní PG::Error . AFAIK, dostanete PG::Error pokud jste mluvili přímo s databází místo toho, abyste procházeli ActiveRecord.
  2. Nahraďte INDEX_NAME_GOES_HERE se skutečným názvem jedinečného indexu.
  3. Chcete ignorovat pouze konkrétní porušení omezení, které očekáváte, proto next if(...) bit následovaný argumentem raise (tj. znovu aktivujte výjimku, pokud to není to, co očekáváte).


  1. Mysql - Jak ukončit/ukončit uloženou proceduru

  2. Získání mysql, aby ignoroval podmínku kde

  3. mysql_close():5 není platný zdroj MySQL-Link v C:\wamp\www\Includes\footer.php na řádku 4

  4. Hledání funkční závislosti