Проверка на минимальную длину названия статьи
Добавим проверку на минимальную длину поля «Название» (минимум 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>
Это добавит кнопку, ведущую на страницу с полной статьёй.
В этом уроке мы реализовали валидацию формы для добавления статей, добавили вывод сообщений об ошибках и улучшили отображение списка статей.