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

StackOverflow https://stackoverflow.com/questions/1454626

  •  12-09-2019
  •  | 
  •  

Вопрос

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

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

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

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

Это было полезно?

Решение

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

    рендеринг:xls => @model

Другие советы

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

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

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

я только что сделал это сегодня для своего приложения, надеюсь, это поможет для Excel o / p ;никогда не использовал никаких плагинов

контроллер:экспорт определения pr = Program.find(сессия[: pr_id]) заголовки ['Content-Type']="приложение / vnd.ms-excel" заголовки['Content-Dispositon']='вложение;имя файла="report.xls"' @voucherdatas = Voucherdata.find_all_by_pr_name(pr.pr_name) завершение

Вид:экспорт.html.erb

менеджер "отчеты/voucherdatas", :object =>@voucherdatas %>

маршруты.rb карта.ресурсы:отчеты,:коллекция =>{:экспорт =>:получить}

куда бы вы ни захотели, ссылку предоставьте

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top