Где я должен разместить код, который генерирует электронную таблицу Excel? - PullRequest
0 голосов
/ 21 сентября 2009

Я использую электронную таблицу gem для создания собственного файла Excel. Это не CSV, XML-файл. Обычный код Ruby используется для создания файла. Сгенерированный файл Excel (хранится в StringIO) пересылается клиенту с использованием метода send_data. Мне нужен метод send_data из-за его параметров, таких как disposition.

Данные для Excel извлекаются в методе контроллера, как и для обычных запросов HTML, JS. Однако я поместил код для генерации электронной таблицы в защищенный контроллером метод. Не в том виде, как я должен.

Существует ли элегантное решение вышеуказанной проблемы, совместимое с шаблоном проектирования MVC?

Обновление: не существует популярного и общепринятого решения вышеупомянутой проблемы, но, по крайней мере, я знаю все возможные идеи.

Ответы [ 3 ]

3 голосов
/ 21 сентября 2009

Каталог lib предназначен для размещения кода, который не является строго частью структуры MVC, но будет необходим для нескольких моделей, представлений или контроллеров. При необходимости его можно ввести с помощью require.

Однако, если вам нужен код только в одном контроллере, вы бы с таким же успехом поместили его в помощник этого контроллера. Таким образом, он автоматически загружается и у вас под рукой. Кроме того, это имеет смысл: это код, помогающий конкретному контроллеру.

В любом случае, не оставляйте его в контроллере и не пытайтесь втиснуть его в поле зрения.

0 голосов
/ 22 сентября 2009
  1. Создайте в своей библиотеке lib библиотеку Excel, в которую вы включили бы процедуру генерации xls, а также метод, который переопределяет метод ActionController render.
  2. В модели, которая должна отображаться как xls, реализуется метод с именем to_excel, который генерирует хеш, который вы можете предоставить своей подпрограмме xls.
  3. Делая это таким образом, вы получите что-то действительно "Railsy". В вашем контроллере вы просто позвоните

    render: xls => @ model

0 голосов
/ 22 сентября 2009

Я только что сделал это сегодня, потому что мое приложение надеется, что это поможет для Excel O / P; никогда не использовал плагин

Контроллер: экспорт по умолчанию pr = Program.find (session [: pr_id]) заголовки [ 'Content-Type'] = "приложение / vnd.ms-первенствовать" заголовки [ 'Content-Dispositon'] = 'прикрепление; имя файла = "Report.xls"' @voucherdatas = Voucherdata.find_all_by_pr_name (pr.pr_name) конец

просмотр: export.html.erb

менеджер "reports / voucherdatas",: object => @ voucherdatas%>

routes.rb map.resources: reports,: collection => {: export =>: get}

везде, где вы хотите, чтобы ссылка дала

link_to "Экспортировать как Excel", export_reports_url,: popup => true

...