Как добавить категории в приложение Ruby on Rails

Как добавить категории в приложение Ruby on Rails

Содержание
  1. Как сгенерировать подмостки для блога
  2. Как сгенерировать эшафот категорий
  3. Как добавить ассоциацию между моделями блога и категории
  4. Заключение

Создание страницы категории необходимо для большинства веб-приложений в наши дни. Различные виды приложений, такие как блоги, сайты электронной коммерции, платформы для просмотра фильмов и многие другие, имеют функции категорий.

В этой статье мы расскажем, как добавить категории в приложения Ruby on Rails.

Это руководство для начинающих, поэтому вы сможете следовать ему, даже если у вас есть базовые знания Ruby on Rails.

Как сгенерировать подмостки для блога

Сначала создадим новый проект Rails. Здесь мы будем использовать Rails версии 6.1.7 и Ruby версии 3.0. Вы можете создать новый проект Rails с помощью команды ниже:

rails new blog_categories

Теперь давайте создадим новый блог с помощью следующей команды:

rails g scaffold blogs title:string description:text.

Эта команда создаст все необходимые файлы для работы с операциями CRUD блога с двумя полями базы данных title и description. Здесь title - это поле string, а description - поле text.

Теперь вам нужно запустить миграцию с помощью команды rails db:migrate.

Теперь подойдите к терминалу, запустите сервер и зайдите на страницу /blogs. В браузере вы увидите следующий результат.

Как сгенерировать эшафот категорий

Теперь мы подошли к основной части руководства, которая заключается в добавлении категорий к статьям нашего блога.

Для этого давайте создадим скаффолд категорий с помощью следующей команды:

rails g scaffold categories name:string.

Эта команда создаст CRUD для категорий.

Также вам нужно будет запустить rails db:migrate для обновления схемы.

Как добавить ассоциацию между моделями блога и категории

Далее вам нужно добавить ассоциацию между моделями blog и category.

В файле Blog.rb:

class Blog < ApplicationRecord belongs_to :category end.

И в Category.rb:

class Category < ApplicationRecord has_many :blogs end.

Теперь вам нужно добавить category_id в таблицу blogs, поскольку каждый блог связан с категорией. Вы можете перейти в терминал и добавить следующий переход:

rails g migration add_category_id_to_blogs.

Это создаст новую миграцию. Вам нужно добавить следующий код в этот файл миграции:

add_column :blogs, :category_id, :integer.

Rails имеет свой собственный набор соглашений и правил. И он достаточно умен, чтобы понять, что эта миграция должна добавить новый столбец базы данных с именем category_id в таблицу blogs.

Теперь вам нужно передать category_id в качестве сильного параметра в контроллере blogs.

def blog_params params.require(:blog).permit(:title, :content, :category_id) end

Теперь давайте создадим несколько категорий в браузере.

Вы также можете добавить некоторую валидацию при создании категории. Для этого вы можете обновить файл category.rb следующим кодом:

class Category < ApplicationRecord validates :name, presence: true, uniqueness: true has_many :blogs end.

Это добавит несколько валидаций, как показано в GIF ниже:

validations.gif
validations.gif

добавление валидаций при создании категорий Как отобразить категории в виде выпадающего списка на странице новых блогов

Теперь, когда вы можете создавать как блоги, так и категории, вам нужно отображать все категории в виде выпадающего списка, когда кто-то посещает страницу нового блога.

Код для этого показан ниже:

<div> <%= form.label :category %> <%= form.select :category_id, options_for_select(Category.all.map { |category| [category.name, category.id]})%> </div>

Тег select создает выпадающее поле выбора. Опция options_for_select принимает несколько аргументов.

Во-первых, он перебирает все категории и возвращает массив [c.category, c.id]. Название категории отображается в виде выпадающего списка, а идентификатор категории, который выбирает пользователь, передается в контроллер. Затем контроллер выполняет вставку в базу данных для блогов.

Вы можете перейти по URL-адресу новых блогов и создать блоги с категориями.

В следующей части этого руководства мы покажем вам, как вывести список всех категорий и всех блогов, связанных с каждой категорией. Мы будем отображать это на странице индекса категорий.

Для этого вам нужно добавить некоторый код в представление индекса категорий.

<p id="notice"><%= notice %>
<h1>Категории</h1>
<table>
  <thead>
    <tr>
      <th>Название</th>
      <th>Блоги</th>
      <th colspan="3"></th>
    </tr>
  </thead>
  <tbody>
    <% @categories.each do |category| %>
    <tr>
      <td><%= category.name %></td>
      <% category.blogs.each do |blog| %>
      <td><%= blog.title %></td>
      <% end %>
    </tr>
    <% end %>
  </tbody>
</table>

<%= link_to 'New Category', new_category_path %>

Здесь происходит итерация по всем категориям для отображения названия каждой категории. После того как мы закончим с отображением названия категории, следующей частью будет отображение всех блогов, связанных с каждой категорией. Таким образом, вы можете выполнить итерацию по category.blogs, из которой вы получите записи о блогах.

Если вы Посетив маршрут /category, вы увидите все категории с их блогами, как показано в GIF ниже.

cat_blogs.gif
cat_blogs.gif

Заключение

В этом уроке вы узнали, как можно добавлять категории в приложения Ruby on Rails, используя ассоциации ”один-ко-многим”.

Если вам понравилась эта статья, пожалуйста, угостите меня кофе ☕.

Вы можете найти меня в Twitter для получения различных материалов, связанных с веб-разработкой.

Спасибо за чтение.

Счастливого кодинга.

Источник