Implementing a basic CRUD application in Ruby on Rails

Implementing a Basic CRUD Application in Ruby on Rails

Ruby on Rails, often simply referred to as Rails, is a powerful web application framework that allows developers to create robust applications quickly and efficiently. One of the fundamental concepts in web development is CRUD—Create, Read, Update, and Delete. In this article, we'll walk through building a basic CRUD application in Ruby on Rails, providing detailed instructions, code snippets, and insights to help you understand each step of the way.

What is CRUD?

CRUD stands for the four basic functions of persistent storage:

  • Create: Adding new records to the database.
  • Read: Retrieving existing records.
  • Update: Modifying existing records.
  • Delete: Removing records from the database.

CRUD operations are essential for any application that manages data, making it an ideal starting point for beginners learning Ruby on Rails.

Setting Up Your Rails Environment

Before we dive into coding, ensure you have Ruby and Rails installed on your machine. You can check this by running:

ruby -v
rails -v

If you haven't installed Rails yet, you can do so using the command:

gem install rails

Next, create a new Rails application:

rails new crud_app
cd crud_app

This command sets up a new Rails application named crud_app.

Generating the Scaffold

Rails provides a powerful scaffold generator that creates a complete set of files needed for a CRUD interface. For this example, let’s create a simple application to manage books with attributes like title and author.

Run the following command:

rails generate scaffold Book title:string author:string

This command generates:

  • A model (book.rb)
  • A controller (books_controller.rb)
  • Views for each CRUD operation
  • A migration file to create the books table in the database

Running the Migration

Next, migrate the database to create the books table:

rails db:migrate

Understanding the Generated Code

Rails follows the MVC (Model-View-Controller) architecture. Here’s a quick breakdown of the generated files:

1. Model (app/models/book.rb)

The model contains the business logic and validations for the Book entity.

class Book < ApplicationRecord
  validates :title, presence: true
  validates :author, presence: true
end

2. Controller (app/controllers/books_controller.rb)

The controller handles incoming requests and manages the flow of data between the model and views.

class BooksController < ApplicationController
  def index
    @books = Book.all
  end

  def show
    @book = Book.find(params[:id])
  end

  def new
    @book = Book.new
  end

  def create
    @book = Book.new(book_params)
    if @book.save
      redirect_to @book, notice: 'Book was successfully created.'
    else
      render :new
    end
  end

  def edit
    @book = Book.find(params[:id])
  end

  def update
    @book = Book.find(params[:id])
    if @book.update(book_params)
      redirect_to @book, notice: 'Book was successfully updated.'
    else
      render :edit
    end
  end

  def destroy
    @book = Book.find(params[:id])
    @book.destroy
    redirect_to books_url, notice: 'Book was successfully destroyed.'
  end

  private

  def book_params
    params.require(:book).permit(:title, :author)
  end
end

3. Views (app/views/books/)

Rails generates views for each action, allowing you to create forms and display data. Here’s an example of the index.html.erb file:

<h1>Books</h1>

<table>
  <thead>
    <tr>
      <th>Title</th>
      <th>Author</th>
      <th colspan="3"></th>
    </tr>
  </thead>
  <tbody>
    <% @books.each do |book| %>
      <tr>
        <td><%= book.title %></td>
        <td><%= book.author %></td>
        <td><%= link_to 'Show', book %></td>
        <td><%= link_to 'Edit', edit_book_path(book) %></td>
        <td><%= link_to 'Destroy', book, method: :delete, data: { confirm: 'Are you sure?' } %></td>
      </tr>
    <% end %>
  </tbody>
</table>

<%= link_to 'New Book', new_book_path %>

Running the Application

To see your CRUD application in action, start the Rails server:

rails server

Now, navigate to http://localhost:3000/books in your web browser. You should see a simple interface for managing books, where you can create, read, update, and delete records.

Troubleshooting Common Issues

Here are a few common issues you may encounter while implementing your CRUD application and how to resolve them:

  • Missing Migration: If you forget to run rails db:migrate, your database will not have the required tables. Always run the migration after generating the scaffold.
  • Strong Parameters Error: If you forget to include the book_params method in your controller, you'll encounter a param is missing or the value is empty error. Ensure your strong parameters are set correctly.

Conclusion

Building a basic CRUD application in Ruby on Rails is a great way to familiarize yourself with the framework's conventions and capabilities. By generating scaffolds and understanding the MVC architecture, you can efficiently manage data in web applications.

As you progress, consider exploring more advanced features like authentication, associations, and API integrations. With Rails' robust ecosystem, the possibilities are endless!

Now, roll up your sleeves and start building your first CRUD application with Ruby on Rails! Happy coding!

SR
Syed
Rizwan

About the Author

Syed Rizwan is a Machine Learning Engineer with 5 years of experience in AI, IoT, and Industrial Automation.