Ruby on Rails: Редактирование и удаление постов

Редактирование постов

Для добавления возможности редактирования постов необходимо внести изменения в HTML-шаблон и контроллер.

Изменение HTML-шаблона (_post.html.erb)

В файл _post.html.erb, отвечающий за вывод постов, добавим горизонтальную линию и ссылку для редактирования:

<hr>
<%= link_to 'Редактировать', edit_post_path(post), class: 'btn btn-warning' %>

Ссылка использует edit_post_path(post), автоматически генерируемый Rails, для перехода на страницу редактирования. Класс btn btn-warning стилизует ссылку как кнопку.

Добавление метода edit в контроллер

В контроллере необходимо добавить метод edit, который будет находить пост по ID и передавать его в шаблон редактирования:

def edit
  @post = Post.find(params[:id])
end

Этот метод аналогичен методу show, но используется для отображения формы редактирования.

Создание HTML-шаблона для редактирования (edit.html.erb)

Создадим файл edit.html.erb в папке views/posts. Его содержимое можно скопировать из show.html.erb, заменив вывод поста на форму редактирования:

<h1>Редактирование поста</h1>
<%= form_with(model: @post, local: true) do |form| %>
  <%= form.label :title %>
  <%= form.text_field :title %>

  <%= form.label :body %>
  <%= form.text_area :body %>

  <%= form.submit %>
<% end %>

Это позволяет заполнить поля формы данными существующего поста.

Добавление метода update в контроллер

Для сохранения изменений необходимо добавить метод update в контроллер:

def update
  @post = Post.find(params[:id])
  if @post.update(post_params)
    redirect_to @post
  else
    render 'edit'
  end
end

private
  def post_params
    params.require(:post).permit(:title, :body)
  end

Метод update обновляет пост и перенаправляет пользователя на страницу просмотра поста (redirect_to @post) в случае успеха. В случае ошибки он перерендеривает форму редактирования (render ‘edit’).

Удаление постов

Для реализации удаления постов необходимо добавить метод в контроллер и кнопку в HTML-шаблон.

Добавление метода destroy в контроллер

В контроллер добавим метод destroy:

def destroy
  @post = Post.find(params[:id])
  @post.destroy
  redirect_to posts_path
end

Этот метод находит пост по ID и удаляет его, после чего перенаправляет на страницу со списком постов.

Добавление кнопки удаления в HTML-шаблон (_post.html.erb)

В _post.html.erb добавим кнопку удаления:

<%= link_to 'Удалить пост', post, method: :delete, data: { confirm: 'Хотите удалить статью?' }, class: 'btn btn-danger' %>

Эта ссылка использует метод delete для отправки запроса на удаление и data-confirm для вывода подтверждающего окна. Класс btn btn-danger стилизует кнопку красным цветом.

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

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