Domanda

foglio di lavoro gemma per generare file nativo di Excel. Questo non è CSV, file XML. codice Ruby ordinaria viene utilizzato per creare il file. Il file Excel generato (tenuto in StringIO) viene inoltrato a un client utilizzando il metodo send_data. Ho bisogno metodo send_data a causa dei suoi parametri come disposition.

I dati per l'Excel vengono recuperati nel metodo di controllo, proprio come per la normale HTML, JS richieste. Tuttavia ho messo il codice per generare il foglio di calcolo in modalità di controllo protetta. Non in una vista come dovrei.

C'è una soluzione elegante per problema di cui sopra compliant con design pattern MVC?

Aggiornamento:. Non v'è alcun popolare e accettato da tutte le soluzione al problema di cui sopra, ma almeno so che tutte le idee possibili

È stato utile?

Soluzione

  1. Crea un libreria di Excel nella cartella lib in cui si include la vostra routine generazione xls, nonché un metodo che sovrascrive il metodo render di ActionController.
  2. In un modello che dovrebbe essere reso come xls implementare un metodo to_excel metodo chiamato che genera un hash che è possibile fornire alla vostra routine xls.
  3. Facendo in questo modo, si otterrà qualcosa di veramente "Railsy". Nel vostro controller ti basta chiamare

    render: xls => @model

Altri suggerimenti

La directory lib è inteso come un luogo per il codice che non è strettamente parte della struttura MVC, ma saranno necessarie da più modelli, viste o controllori. Può essere portato con un require quando necessario.

Tuttavia, se solo è necessario il codice in un unico controller, devi essere altrettanto bene fuori messa in supporto che del controller. In questo modo è auto-caricato e a portata di mano. Inoltre, ha senso:. È il codice per aiutare un controller specifico

In entrambi i casi, non lasciare nel vostro controller o cercare di cuneo nella tua vista.

Ho appena fatto questo oggi per la mia app speranza che questo aiuti per un Excel o / p; mai usato alcun plugin

Controller: esportazione DEF pr = Program.find (session [: pr_id]) headers [ 'Content-Type'] = "application / vnd.ms-excel" headers [ 'Content-dispositon'] = 'attachment; filename = "Report.xls"' @voucherdatas = Voucherdata.find_all_by_pr_name (pr.pr_name) end

vista: export.html.erb

       manager           "rapporti / voucherdatas",: Object => @ voucherdatas%>   

routes.rb  map.resources: rapporti,: collection => {: export =>: ottenere}

dovunque u vuole il dare legame

link_to "Esporta come Excel", export_reports_url,: popup => true

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top