Создание и обновление 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, чтобы выполнялись изменения в фоне.