Skip to main content

Ruby on Rails — Создание простого приложения. Часть 2. Удаление и изменение задач.

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

Первым делом внесем небольшие изменения в отображение задач. Сделаем так, чтобы последние добавленные задачи отображались первыми в списке. Для этого откроем файл контроллера tasks_controller.rb и в методе index поменяем строчку @tasks = Task.all на строку @tasks = Task.all.order(created_at: :desc). В результате получим метод вида:

def index
    @task = Task.new
    @tasks = Task.all.order(created_at: :desc)
end

Удаление задач

Проще быть и не может. Для удаления записи с базы данных нам нужно добавить в наш контроллер метод destroy. Открываем файл контроллера tasks_controller.rb и добавляем в него:

def destroy
  @task = Task.find(params[:id])
  @task.destroy
 
  redirect_to root_path
end

Метод для удаления у нас есть, теперь нужно отобразить ссылку или кнопку для того, чтобы мы могли удалить запись. Для этого отредактируем файл index.html.erb в папке views/tasks и приведем к такому виду:

<h1>Менеджер задач</h1>

<%= form_for @task do |f| %>
    <%= f.text_field :title %><br>
    <%= f.text_area :text, size: "40x8" %><br>
    <%= f.submit "Добавить задачу" %>
<% end %>
<hr>

<% @tasks.each do |t| %>
    <b><%= t.title %></b><br>
    <p><%= t.text %> <%= link_to 'Удалить', task_path(t),
              method: :delete,
              data: { confirm: 'Вы уверены?' } %></p>;
<% end %>

Как вы увидели, мы добавили ссылку, которая используя метод :delete указывает контроллеру, что мы хотим удалить запись из базы. Это простыми словами, на самом деле все немного не так, но суть ясна) После клика по ссылке, мы получим диалоговое окно с подтверждением и если нажмем кнопку "ОК", то запись будет удалена.

Редактирование задач

Добавим ссылку для редактирования записей в файл index.html.erb, дописав код в цикл вывода задач:

<%= link_to 'Редактировать', edit_task_path(t) %>

При нажатии на эту ссылку у нас откроется отдельная страница с формой, в которой мы сможем отредактировать нашу задачу, а именно изменить имя или описание задачи.

Создадим файл edit.html.erb в папке views/tasks и добавим в него код:

<h1>Редактирование задачи</h1>
 
<%= form_for @task do |f| %>
 
  <p>
    <%= f.label :title, "Название" %><br>
    <%= f.text_field :title %>
  </p>
 
  <p>
    <%= f.label :text, "Описание" %><br>
    <%= f.text_area :text %>
  </p>
 
  <p>
    <%= f.submit "Сохранить" %>
  </p>
 
<% end %>
 
<%= link_to 'Назад', root_path %>

Страницу мы создали и добавили в неё код, теперь для того, чтобы данные загружались в форму редактирования нужно создать метод в контроллере. Добавим код в файл контроллера tasks_controller.erb:

def edit
    @task = Task.find(params[:id])
end

Данные теперь подгружаются, страница открывается но если мы нажмем на кнопку «Сохранить» — получим ошибку. У нас нет метода который отвечает за обновление записи, добавим в файл контроллера tasks_controller.erb код:

def update
    @task = Task.find(params[:id])

    if @task.update(tasks_params)
        redirect_to root_path
    else
        redirect_to root_path
    end
end

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

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

Файлы проекта на GitHub

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *