Pergunta

Eu estou usando planilha gem para gerar arquivos nativo Excel. Este não é CSV, arquivo XML. código Ruby comum é usado para criar o arquivo. O arquivo Excel gerado (mantidos em StringIO) é encaminhado para um cliente usando o método send_data. Eu preciso send_data método por causa de seus parâmetros como disposition.

Os dados para o Excel é recuperado no método de controle como para HTML comum, os pedidos JS. No entanto I colocado o código para gerar a folha de cálculo no método protegido controlador. Não em uma visão como deveria.

Existe uma solução elegante para compatível problema acima com padrão de projeto MVC?

Update:. Não há popular e aceite por todos solução para o problema acima, mas pelo menos eu sei todas as idéias possíveis

Foi útil?

Solução

  1. Criar uma biblioteca de excel na sua pasta lib em que você incluir sua rotina de geração xls, bem como um método que o método render substituições de ActionController.
  2. Em um modelo que deve ser processado como xls implementar um método chamado método to_excel que gera um hash que você pode fornecer a sua rotina xls.
  3. Fazendo dessa forma, você vai ter algo realmente "Railsy". Em seu controlador você só vai chamar

    render: xls => @model

Outras dicas

O diretório lib é concebida como um lugar para o código que não é estritamente parte da estrutura do MVC, mas serão necessários por vários modelos, visualizações, ou controladores. Ele pode ser trazido com um require quando necessário.

No entanto, se você só precisa do código em um único controlador, você estaria tão bem fora colocá-lo em auxiliar que do controlador. Dessa forma, é automaticamente carregado e ao seu alcance. Além disso, faz sentido:. É o código para ajudar um controlador específico

De qualquer maneira, não deixá-lo em seu controlador ou tentar encostá-lo em seu ponto de vista.

Eu só fiz isso hoje para a minha esperança aplicativo que ajuda para um excel o / p; nunca usou qualquer plugin

controlador: exportação def PR = Program.find (sessão [: pr_id]) headers [ 'Content-Type'] = "application / vnd.ms-excel" cabeçalhos [ 'Conteúdo-dispositon'] = 'anexo; nome do ficheiro = "Relatório.xls"' @voucherdatas = Voucherdata.find_all_by_pr_name (pr.pr_name) end

vista: export.html.erb

Gerente "relatórios / voucherdatas",: object => @ voucherdatas%>

routes.rb map.resources: relatórios,: collection => {: export =>: get}

whereever u deseja que o vínculo de repasse

link_to "Exportar como Excel", export_reports_url,: pop-up => true

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top