В первой части урока мы с вами создали наше первое приложение на 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 и заполняет нужные поля новыми данными, после чего мы получаем обновленную запись.
Как видите, производить операции удаления и обновления очень просто. В следующем уроке, добавим пару интересных фишек)