Altcademy - a Forbes magazine logo Best Coding Bootcamp 2023

What is Routing in Ruby on Rails?

Introduction

When you're learning programming, you might have come across the term "routing" in the context of web development. It might seem like a complex topic filled with jargons, but it's actually quite simple once you understand the core concepts. In this blog, we'll discuss routing in Ruby on Rails, a popular web development framework, and how it makes your life easier as a web developer. So, let's get started!

What is Routing?

Imagine you're at a shopping mall, and there's a directory to help you find your way to different stores. The directory maps store names to their locations in the mall. Similarly, when you visit a website, you're looking for specific content, and you need a way to navigate through the site. This is where routing comes in.

Routing is the process of mapping URLs (Uniform Resource Locators) to specific actions in your web application. When a user requests a URL, the web application needs to know which action should be taken and which content should be displayed. This is achieved through routing.

Ruby on Rails (or simply Rails) is a web development framework that follows the MVC (Model-View-Controller) architectural pattern. The routing system in Rails is responsible for directing the user's request to the appropriate controller and action.

How Routing Works in Rails

In Rails, the routes are defined in a file called config/routes.rb. This file contains the rules that determine how URLs are mapped to controllers and actions. When a user requests a URL, Rails will use these rules to find the correct controller and action to handle the request.

Here's an example of a simple routes.rb file:

Rails.application.routes.draw do
  get 'welcome/index'
  resources :articles
end

In this example, we have two routes defined:

  1. A get route for the welcome/index URL, which will map to the index action in the WelcomeController.
  2. A resources route for :articles, which will generate several routes for the ArticlesController, including the standard CRUD (Create, Read, Update, Delete) actions.

Let's dive deeper into these two types of routes.

get Route

The get route is used when you want to define a simple route that maps a URL to a specific action in a controller. In our example, the get 'welcome/index' line is telling Rails that when a user requests the welcome/index URL, it should call the index action in the WelcomeController.

The syntax for defining a get route is:

get 'URL', to: 'controller_name#action_name'

If you want to map the root URL (i.e., the home page) of your application to a specific controller and action, you can use the root keyword in your routes.rb file:

Rails.application.routes.draw do
  root 'welcome#index'
end

This will map the root URL (e.g., https://example.com/) to the index action in the WelcomeController.

resources Route

The resources route is a powerful feature in Rails that allows you to generate several routes for a given resource with a single line of code. A resource is a term used in Rails to describe a collection of similar objects, such as articles, users, or products.

In our example, the resources :articles line generates routes for the standard CRUD actions on articles. These routes would map to the following actions in the ArticlesController:

  • index: List all articles
  • show: Display a specific article
  • new: Show a form to create a new article
  • create: Save a new article in the database
  • edit: Show a form to edit an existing article
  • update: Update an existing article in the database
  • destroy: Delete an article from the database

By using the resources keyword, Rails automatically generates these routes for you, saving you time and effort. You can also limit the actions generated by the resources keyword by using the :only or :except options:

resources :articles, only: [:index, :show]
resources :users, except: [:destroy]

In the first example, only the index and show routes will be generated for articles. In the second example, all routes except the destroy route will be generated for users.

Customizing Routes

Rails provides several ways to customize your routes, making them more intuitive and user-friendly.

Custom Path Names

You can customize the path names used in your routes by using the :as option. This is useful when you want to use a more descriptive or shorter path name for a specific route. For example:

get 'welcome/index', to: 'welcome#index', as: 'home'

This will generate a route with the path name home, which maps to the index action in the WelcomeController. You can then use this path name in your views and controllers using Rails' URL helper methods:

link_to 'Home', home_path

Nested Routes

When you have resources that are related to each other, you can use nested routes to reflect this relationship in your URLs. For example, let's say each article can have multiple comments. You can define a nested route like this:

resources :articles do
  resources :comments
end

This will generate routes for comments that include the article's ID in the URL, such as /articles/1/comments/1. This makes it clear that the comment belongs to a specific article and helps you organize your routes more effectively.

Route Constraints

You can also use constraints to restrict the URLs that are matched by a route. Constraints can be based on the request's parameters, HTTP headers, or even a custom method. For example, let's say you want to restrict the :id parameter in your article routes to only accept numerical values:

resources :articles, constraints: { id: /\d+/ }

This will ensure that only URLs with a numerical :id parameter will be matched by the articles routes.

Conclusion

Routing is a crucial part of web development, as it helps users navigate through your application and find the content they're looking for. Rails provides a powerful and flexible routing system that makes it easy to define and customize routes for your application.

In this blog, we've covered the basics of routing in Rails, including:

  • What routing is and how it works in Rails
  • The different types of routes in Rails, such as get and resources
  • Customizing routes with custom path names, nested routes, and constraints

By understanding these concepts and applying them to your Rails projects, you'll be well on your way to building user-friendly and well-organized web applications. Keep learning and happy coding!