Список всех страниц

Список всех страниц

Кнопка «Показать список страниц» направляет пользователя к слагу /all/, который отличается от слагов обычных страниц.

Вместо того чтобы извлечь одну запись, DataMapper извлекает все записи Page базы данных. Шаблон ERB для Page содержит условный цикл, который создает список всех извлеченных страниц. Каждый элемент списка содержит заголовок страницы, отображаемый в виде ссылки на соответствующий странице слаг. Щелчок по ссылке направляет пользователя на конкретную страницу.

Первый запуск приложения

Итак, у меня есть основные функции, однако есть и проблема: во время тестирования приложения попытка перейти к главной странице вызывает сообщение об ошибке. Программа пытается найти запись Home в базе данных, но ее не существует, поскольку я запустил приложение в первый раз!

Выход — создать «однократный процесс управления» при помощи программы под названием Rake. Программы Rake хранятся в папке Rakefile, которая находится в корневом каталоге приложения.

Файлы Rake работают как обычные приложения Ruby, но с одним исключением: они существуют вне вашей основной программы, и вы должны запускать их вручную.Список всех страниц

Это делает Rake очень удобным средством для таких действий, как добавление начальной информации в базу данных перед запуском реальной программы. Я копирую необходимые фрагменты application.rb в Rakefile, затем пишу команду, которая создает новую запись для главной страницы в базе данных. Остается лишь один раз запустить следующую команду:

$ rake setup

Rake создает запись «Главная страница», и мое приложение перестает выдавать ошибку при запуске. Когда я размещу это приложение на Heroku, то запущу команду Rake удаленно, чтобы настроить базу данных перед первой попыткой использовать приложение.

Теперь все основные функции на месте. Пора добавить что-нибудь интересное.

Добавление поддержки бокового поля

Я только что сообразил, что не включил в боковое поле функцию добавления страниц, как планировал изначально. Это логическая функция, поскольку может иметь только два значения: страницу предполагается отобразить в боковом поле или нет.

Я добавил новый класс в DataMapper:

property: sidebar, Boolean, default => false

Я также добавил кнопку-флажок к экрану «Редактировать» рядом с вопросом «Включить в боковое поле?» и связал эту кнопку с соответствующим полем в базе данных. Затем написал простой цикл, чтобы найти записи в базе данных, когда sidebar = true, и вывести их в виде списка, аналогичного странице «Список всех страниц».

Я снова запускаю приложение, редактирую запись, и приложение вылетает. Проклятье!

Я снова и снова пытаюсь найти ошибку, но безуспешно. Перерыв документацию DataMapper и обратившись к Stack Overflow, я выясняю, что логические переменные плохо сочетаются с формами HTML. Нужен другой подход:

property: sidebar, Enum [: yes, no], default =>: no

Это другой способ сделать примерно то же самое. Enum, что означает «перечислять», создает список опций, и форма устанавливает, какую опцию сохранить в базе данных.

Понравилась статья? Поделиться с друзьями:
Все о современном строительстве и ремонте
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: