Создание “сделано” для 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!