Редактирование постов
Для добавления возможности редактирования постов необходимо внести изменения в 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. Теперь ваш блог имеет полноценную систему управления контентом.