0
0
Ruby on Railsframework~5 mins

Uniqueness validation in Ruby on Rails

Choose your learning style9 modes available
Introduction

Uniqueness validation makes sure no two records have the same value for a specific field. This helps keep data clean and avoids duplicates.

When you want to ensure each user has a unique email address.
When product codes must not repeat in your inventory.
When usernames need to be unique for login.
When you want to prevent duplicate entries in a database table.
Syntax
Ruby on Rails
validates :field_name, uniqueness: true
Use this inside a Rails model to check uniqueness before saving.
It checks the database to prevent duplicates.
Examples
This ensures each user's email is unique.
Ruby on Rails
class User < ApplicationRecord
  validates :email, uniqueness: true
end
This makes product codes unique, ignoring letter case.
Ruby on Rails
class Product < ApplicationRecord
  validates :code, uniqueness: { case_sensitive: false }
end
This ensures usernames are unique per account, allowing same username in different accounts.
Ruby on Rails
class Member < ApplicationRecord
  validates :username, uniqueness: { scope: :account_id }
end
Sample Program

This example creates a user with an email, then tries to create another with the same email. The second user is invalid because the email is already taken.

Ruby on Rails
class User < ApplicationRecord
  validates :email, uniqueness: true
end

# In Rails console or test
user1 = User.create(email: 'test@example.com')
user2 = User.new(email: 'test@example.com')
valid = user2.valid?
errors = user2.errors.full_messages
OutputSuccess
Important Notes

Uniqueness validation works at the application level, so race conditions can still happen. Use a unique index in the database for full safety.

By default, uniqueness is case sensitive. Use case_sensitive: false to ignore case.

You can use scope to make uniqueness apply within a group, like per user or account.

Summary

Uniqueness validation prevents duplicate values in a database field.

It is added inside Rails models using validates :field, uniqueness: true.

For full protection, combine it with a unique database index.