Uniqueness validation makes sure no two records have the same value for a specific field. This helps keep data clean and avoids duplicates.
Uniqueness validation in Ruby on Rails
validates :field_name, uniqueness: true
class User < ApplicationRecord
validates :email, uniqueness: true
endclass Product < ApplicationRecord
validates :code, uniqueness: { case_sensitive: false }
endclass Member < ApplicationRecord
validates :username, uniqueness: { scope: :account_id }
endThis 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.
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
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.
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.
Practice
validates :email, uniqueness: true do in a Rails model?Solution
Step 1: Understand uniqueness validation purpose
Uniqueness validation ensures no two records have the same value for the specified field.Step 2: Apply to the email field
Usingvalidates :email, uniqueness: truemeans Rails will check that the email is unique before saving.Final Answer:
Prevents saving records with duplicate email values -> Option BQuick Check:
Uniqueness validation = prevents duplicates [OK]
- Thinking it encrypts data
- Assuming it deletes duplicates automatically
- Believing it allows duplicates
Solution
Step 1: Recall Rails validation syntax
Rails usesvalidates :field, uniqueness: truefor uniqueness validation.Step 2: Check each option
validates :username, uniqueness: true matches the correct syntax exactly; others have syntax errors or deprecated style.Final Answer:
validates :username, uniqueness: true -> Option CQuick Check:
Correct uniqueness syntax = validates :field, uniqueness: true [OK]
- Using 'unique' instead of 'uniqueness'
- Using 'validate' instead of 'validates'
- Using deprecated 'validates_uniqueness_of' syntax incorrectly
class User < ApplicationRecord validates :email, uniqueness: true end
What happens if you try to save two users with the same email?
Solution
Step 1: Understand Rails validation behavior
Uniqueness validation runs before saving and prevents duplicates by adding errors.Step 2: Effect on saving duplicate email
The first user saves fine; the second user triggers validation failure and does not save.Final Answer:
The second user fails to save due to validation error -> Option AQuick Check:
Uniqueness validation blocks duplicates on save [OK]
- Thinking both save successfully
- Expecting a database exception instead of validation error
- Assuming database rejects without validation
class Product < ApplicationRecord validates :code, uniqueness: true validates :code, presence: true end
Why might duplicates still be saved?
Solution
Step 1: Understand validation vs database constraints
Rails validations check before saving but do not guarantee uniqueness at the database level.Step 2: Check for unique index necessity
Without a unique database index oncode, race conditions can allow duplicates.Final Answer:
No unique index exists in the database for code -> Option DQuick Check:
Validation alone can't prevent duplicates without DB index [OK]
- Assuming validations alone guarantee uniqueness
- Confusing presence and uniqueness validations
- Thinking validation order matters here
Solution
Step 1: Recall uniqueness validation options
To make uniqueness case insensitive, useuniqueness: { case_sensitive: false }.Step 2: Check each option's correctness
validates :username, uniqueness: { case_sensitive: false } uses correct syntax and option key; others have syntax errors or wrong case sensitivity.Final Answer:
validates :username, uniqueness: { case_sensitive: false } -> Option AQuick Check:
Case insensitive uniqueness = uniqueness: { case_sensitive: false } [OK]
- Placing case_sensitive outside uniqueness hash
- Using 'unique' instead of 'uniqueness'
- Setting case_sensitive to true by mistake
Ready to prove it?
Pass the test and this pattern moves unknown
