โ
Validations
Ensure data integrity at the Model level
Validation checks data validity before it gets saved to the DB.
class Post < ApplicationRecord
validates :title, presence: true, length: { maximum: 200 }
validates :content, presence: true
validates :slug, uniqueness: true
validates :email, format: { with: URI::MailTo::EMAIL_REGEXP }
validates :status, inclusion: { in: %w[draft published archived] }
validate :custom_validation_method
private
def custom_validation_method
if publish_date.present? && publish_date < Date.today
errors.add(:publish_date, 'cannot be in the past')
end
end
end
On validation failure:
saveโ returns falsesave!โ raises ActiveRecord::RecordInvalidmodel.errors.full_messagesto access error messagesIn views,
@post.errors[:title]for per-field errors
Key Points
1
Declare validation rules with validates :field, options
2
presence: true โ blank values not allowed
3
uniqueness: true โ no duplicates (DB index recommended)
4
length: { minimum: 1, maximum: 200 } โ length constraints
5
Validations auto-run on save/create
6
On failure, error messages stored in errors object
Pros
- ✓ Validation at application level, not DB level
- ✓ Automatic error message management
- ✓ Custom validation methods possible
- ✓ Conditional validation support (if:/unless:)
Cons
- ✗ uniqueness has race conditions โ DB unique index needed
- ✗ Complex business rules should be in Service Objects
- ✗ Can be bypassed with skip_validation
- ✗ May need i18n configuration
Use Cases
Required field check (presence)
Email format validation (format)
Duplicate prevention (uniqueness)
Value range validation (inclusion, numericality)