Select Page

Validating Email Addresses in Ruby on Rails Models

by | Mar 2, 2023 | Active Record | 0 comments

Validating email addresses is a common requirement when building web applications. In Ruby on Rails, you can use model validation to ensure that an email address is in the correct format before saving it to the database. In this post, we’ll cover how to validate email addresses in Ruby on Rails models.

Step 1: Add Validation to Your Model

To validate an email address in your Ruby on Rails model, you can use the validates method and pass in the format option with a regular expression that matches the format of an email address.

Here’s an example:

class User < ApplicationRecord
  validates :email, presence: true, format: { with: URI::MailTo::EMAIL_REGEXP }
end

In this example, we’re validating the email attribute of the User model. The presence option ensures that the email is not blank, and the format option uses the URI::MailTo::EMAIL_REGEXP regular expression to validate that the email is in the correct format.

Step 2: Display an Error Message

If a user tries to save an invalid email address, the validation will fail and the email will not be saved to the database. To inform the user that their email address is invalid, you can display an error message.

<% if @user.errors[:email].any? %>
  <div class="alert alert-danger">
    <%= @user.errors[:email].first %>
  </div>
<% end %>

This code checks if there are any errors on the email attribute of the @user object. If there are errors, it displays the first error message in a red alert box.

Step 3: Test Your Validation

To make sure your validation is working as expected, you can write tests to validate that an invalid email address will not be saved to the database.

RSpec.describe User, type: :model do
  context 'with an invalid email address' do
    let(:user) { build(:user, email: 'invalid-email') }

    it 'is not valid' do
      expect(user).not_to be_valid
      expect(user.errors[:email]).to include('is invalid')
    end
  end

  context 'with a valid email address' do
    let(:user) { build(:user, email: 'valid@example.com') }

    it 'is valid' do
      expect(user).to be_valid
    end
  end
end

This code uses RSpec to test two scenarios: one with an invalid email address and one with a valid email address. In the first scenario, we expect the user object to not be valid and to include an error message for the email attribute. In the second scenario, we expect the user object to be valid.

Conclusion

Validating email addresses in Ruby on Rails models is a straightforward process that can help ensure the integrity of your data. By using the validates method with the format option, you can ensure that email addresses are in the correct format before saving them to the database. Additionally, displaying error messages and writing tests can help you catch any issues and ensure that your validation is working correctly.

Kirk Makse

Author: Kirk Makse

Greetings, my name is Kirk. I’m the creator of Rails Zone and a passionate Ruby on Rails developer. During my free time, I develop helpful tools and tutorials that aid fellow Ruby on Rails developers in creating applications with improved efficiency and speed.