- •Введение
- •1 Установка и запуск первого приложения
- •1.1 Установка системы Ruby on Rails
- •1.2 Разработка простейшего приложения с целью проверки работоспособности установленного по
- •2 Подготовка к выполнению проектирования ис
- •3 Настройка базы данных
- •4 Генерация временных платформ
- •5 Работа с контроллерами
- •6 Представления
- •7 Экспорт отчетов
- •8 Аутентификация пользователей
- •9 Многопользовательский режим
- •10 Разработка интерфейса
- •10.1 Стандартный Интернет-интерфейс
- •10.2 Расширение возможностей изменения интерфейса с помощью модуля Bootstrap
- •11 Элементы сложной обработки данных
- •11.1 Динамические средства поиска
- •Список использованных иточников
7 Экспорт отчетов
Иногда требуется не просто просмотреть отчеты, а использовать их в цифровом виде или распечатать, для этого разработаем в нашей ИС экспорт отчетов в формате Excel.
Откройте файл контроллера Pop_hobby. Путь /app/controllers/pop_hobby_controller.rb. Вставьте ниже приведенный код, в метод index (Рисунок 7.1):
respond_to do |format|
format.html
format.xls
end
Рисунок7.1 – Файлpop_hobby_controller.rb
Вставьте ссылку для скачивания отчета в файл представления /app/views/pop_hobby/index.html.erb(Рисунок 7.2):
<%= link_to 'Скачать Excel', 'http://localhost:3000/pop_hobby/index.xls', data: { confirm: "Скачать файл?" } %>
Рисунок 7.2 – Файлindex.html.rbотчета «Популярность хобби»
Не забывайте сохранять файлы при изменении.
Теперь необходимо создать шаблон для экспорта с помощью разметки xml. Создайте новый файл в проекте SublimeTextв папке pop_hobby (Рисунок 7.3):
Рисунок 7.3 – Пример создания нового файла
Напишите в него код:
<?xml version="1.0" encoding="UTF-8"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:html="http://www.w3.org/TR/REC-html40">
<Worksheet ss:Name="Sheet1">
<Table>
<Row>
<Cell><Data ss:Type="String">Код</Data></Cell>
<Cell><Data ss:Type="String">Хобби</Data></Cell>
<Cell><Data ss:Type="String">Число увлеченных</Data></Cell>
</Row>
<%= Hobby.find_each do |hobby| %>
<Row>
<Cell><Data ss:Type="Number"><%= hobby.id %></Data></Cell>
<Cell><Data ss:Type="String"><%= hobby.h_name %></Data></Cell>
<Cell><Data ss:Type="Number"><%= HobbySotr.where(hobby_id: hobby.id).count %></Data></Cell>
</Row>
<% end %>
</Table>
</Worksheet>
</Workbook>
Сохраните файл под названием index.xls.erb.
Осталось добавить новый тип данных в rails. Дляоткройтефайл /config/initializers/mime_types.rb и вставьте в него строку кода:
Mime::Type.register "application/xls", :xls
Сохраните файл и все готово.
Важно! После занесения нового типа сервер нужно перезапустить. В нашем случае остановить его работу Ctrl+Си запустить заново.
Проверьте работу. Откройте отчет «Популярность хобби» и попробуйте его скачать.
Проделайте аналогичные действия для отчета «Увлеченность хобби». Шаблон xmlпредставлен ниже. Не забудьте в ссылке на скачивание файлав пути поменять pop_hobbyна uvl_hobby. Добавлять тип данных xlsкак в четвертом шаге второй раз не надо. Код шаблона:
<?xml version="1.0" encoding="UTF-8"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:html="http://www.w3.org/TR/REC-html40">
<Worksheet ss:Name="Sheet1">
<Table>
<Row>
<Cell><Data ss:Type="String">Код</Data></Cell>
<Cell><Data ss:Type="String">Фамилия</Data></Cell>
<Cell><Data ss:Type="String">Имя</Data></Cell>
<Cell><Data ss:Type="String">Отчество</Data></Cell>
<Cell><Data ss:Type="String">Число хобби</Data></Cell>
</Row>
<%= Sotr.find_each do |sotr| %>
<Row>
<Cell><Data ss:Type="Number"><%= sotr.id %></Data></Cell>
<Cell><Data ss:Type="String"><%= sotr.s_fam %></Data></Cell>
<Cell><Data ss:Type="String"><%= sotr.s_name %></Data></Cell>
<Cell><Data ss:Type="String"><%= sotr.s_otch %></Data></Cell>
<Cell><Data ss:Type="Number"><%= HobbySotr.where(sotr_id: sotr.id).count %></Data></Cell>
</Row>
<% end %>
</Table>
</Worksheet>
</Workbook>