Dove devo inserire il codice che genera foglio di calcolo Excel?
-
12-09-2019 - |
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
Soluzione
- 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. - 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. -
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