Pitfalls in the Validation for Uniqueness Using Rails ActiveRecord

See the original posting on DZone Python

ActiveRecord Validation in Rails provides an easy way to validate records for uniqueness. With the help of a real world example, we show why relying solely on Rails validation could become a problem and demonstrate a way to cleanup your database without downtime.

The Problem

The tagging of translation keys was added as a product feature in the very early stages of the PhraseApp development. Although the feature was constantly improved over time and the performance was very reliable, one day a customer contacted us due to a validation error. The tagging feature had been used rather extensively by this customer to automatically tag all uploaded keys with a GitHub Pull Request, leading to a validation error with an existing tag. So we investigated the issue and discovered that the error was caused by a tag name which was not unique to the project. So how could that happen? We had used ActiveRecord uniqueness validation and only used Rails without skipping the validation.