Создание “сделано” для Todos

Мы добавим “получатель” и “установщик” для нашей 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 и разрешение в контроллере