Создание и обновление Todos
Конечно, нам также бы хотелось добавить пару todos и отмечать их как “выполненные” при необходимости. В Rails это можно сделать добавив методы create и update к нашему контроллеру TodosController.
В методе create мы хотим от Todo модели сохранить новый todo в нашу базу данных. Наше действие должно выглядить приблизительно так:
def create
@todo = Todo.new(todo_params)
if @todo.save
redirect_to action: :index
end
end
Мы создаём новый Todo и назначаем его к переменной @todo. Затем попытаемся сохранить этот новый todo и если он возвращает true, то он будет направлять нас в наше index действие.
Давайте взглянем на todo_params в Todo объекте. Мы его ещё не добавили, но сделаем это через минуту. Метод, который мы собираемся добавить к нашему контроллеру - это не действие, которым вы можете воспольоваться через браузер, это метод, который будет смотреть за параметрами, отправляемыми браузером, он также будет содрежать наши todo-данные. В этом методе мы отметим “разрешённые” параметры.
Вставьте этот метод в конец TodosController перед последним end:
def todo_params
params.require(:todo).permit(:description)
end
Перед тем как мі перейдём к добавлению интерфейса к нашему списку todo, давайте добавим метод update к контроллеру TodosController. Он очень похож на действие create, но вначале взглянем на Todo в базе данных и обновим аттрибут вместо создания нового:
def update
@todo = Todo.find(params[:id])
if @todo
@todo.update_attributes(todo_params)
end
render nothing: true, status: 200
end
Также вместо редиректа мы рендерим пусто и возвращаем 200 как status о том, что всё прошло отлично. Добавим некоторый JavaScript, чтобы выполнялись изменения в фоне.