Ruby on Rails: Валидация форм и проверка длины поля

Проверка на минимальную длину названия статьи

Добавим проверку на минимальную длину поля «Название» (минимум 5 символов). Откройте файл app/models/post.rb и добавьте следующую строку:

validates :title, presence: true, length: { minimum: 5 }

validates :title указывает поле для проверки. presence: true гарантирует, что поле не будет пустым. length: { minimum: 5 } задаёт минимальную длину в 5 символов. Параметр presence по умолчанию true, поэтому его можно опустить. presence: false отключает проверку на пустое поле, требуя явного вызова валидации.

В методе create контроллера posts_controller.rb добавьте обработку валидации:

if @post.save
  redirect_to @post
else
  render :new
end

Этот код перенаправляет пользователя на страницу статьи (redirect_to @post) при успешном сохранении (@post.save), иначе повторно отображает форму создания статьи (render :new).

Вывод ошибок валидации

Для отображения ошибок валидации откройте файл new.html.erb и добавьте следующий код:

<% if @post.errors.any? %>
  <div class="alert alert-danger">
    <% @post.errors.full_messages.each do |message| %>
      <p><%= message %></p>
    <% end %>
  </div>
<% end %>

Этот код проверяет наличие ошибок (@post.errors.any?). Если ошибки есть, он перебирает все сообщения об ошибках (@post.errors.full_messages) и выводит каждое сообщение в отдельном параграфе. В методе new контроллера posts_controller.rb добавьте:

@post = Post.new

Это обеспечит наличие переменной @post.

Улучшение отображения списка статей

Улучшим отображение списка статей в файле index.html.erb. Обернём каждый пост в div с классом card и добавим ссылку «Читать далее»:

<div class="card">
  <!-- Контент поста -->
  <%= link_to "Читать далее", post, class: "btn btn-primary" %>
</div>

Это добавит кнопку, ведущую на страницу с полной статьёй.

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

Что будем искать? Например,программа