Мы добавим “получатель” и “установщик” для нашей Todo-модели, тогда наш контроллер сможет записывать и наши просмотры смогут читать её.

Обое будут использовать поле done_at, которое мы определили вначале. Метод “done”, получатель будет просто проверять поле на пустоту и сообщать:

def done !done_at.to_s.empty? end

Добавьте это к классу модели в app/models/todo.rb. Установщик будет выглядеть немного сложнее, но всё равно он простой:

def done=(toggle) update(done_at: (toggle == "true" ? DateTime.now : nil)) end

Он вызывает update с аттрибутом done_at. Значение зависит от “toggle”, который будет приходить от JavaScript, который мы добавили раньше. Если он выдаёт “true” (todo не отмечен), то он должен установить значение поля “done_at” в текущее время. Если он не “true”, то он установит его в nil, что значит очистит.

После того, как вы добавили мето установки для нашего класса модели, вам нужно добавить аттрибут “done” к “разрешённым” аттрибутам в TodosController. Измените код todo_params на следующий:

def todo_params params.require(:todo).permit(:description, :done) end

Пока мы здесь, давайте сменим порядок в действии index. Мы хотим, чтобы наши todos были в убывающем порядке, чтобы наши новые задачи были наверху. Поэтому вот как наше index-действие должно выгдлядеть:

def index @todos = Todo.all.order('created_at DESC') end

Мы добавили .order('created_at DESC') к all вызову; DESC расшифровывается как “descending” (убывающий).

Сохраните, перезагрузите страницу и “ничосе”!

Ставлю на то, что именно так начиналась разработка Wunderlist!

�� Развертывание сделано на Todo и разрешение в контроллере