2009-09-21 8 views
0

J'utilise spreadsheet gem pour générer le fichier natif Excel. Ce n'est pas un fichier CSV, XML. Le code Ruby ordinaire est utilisé pour créer le fichier. Le fichier Excel généré (conservé dans StringIO) est transmis à un client à l'aide de la méthode send_data. J'ai besoin de la méthode send_data en raison de ses paramètres comme disposition.Où dois-je placer le code qui génère une feuille de calcul Excel?

Les données pour Excel sont récupérées dans la méthode du contrôleur, tout comme pour les requêtes JS HTML ordinaires. Cependant j'ai placé le code pour générer la feuille de calcul dans la méthode protégée par contrôleur. Pas dans une vue comme je devrais.

Existe-t-il une solution élégante au problème ci-dessus compatible avec le modèle de conception MVC?

Mise à jour: Il n'y a pas de solution populaire et acceptée par tous au problème ci-dessus, mais au moins je connais toutes les idées possibles.

Répondre

0
  1. Créer une bibliothèque Excel dans votre dossier lib dans lequel vous incluez votre routine de génération de xls ainsi qu'une méthode qui remplace la méthode render de ActionController.
  2. Dans un modèle qui doit être rendu en tant que xls, implémentez une méthode appelée méthode to_excel qui génère un hachage que vous pouvez fournir à votre routine xls.
  3. En faisant cela, vous obtiendrez quelque chose de vraiment "Railsy".Dans votre contrôleur, vous appelez simplement

    render: xls => @model

+0

Oui, cela semble être dans le style des rails. –

3

Le répertoire lib est conçu comme un emplacement pour du code qui ne fait pas strictement partie de la structure MVC, mais qui sera nécessaire pour plusieurs modèles, vues ou contrôleurs. Il peut être apporté avec un require en cas de besoin.

Cependant, si vous avez seulement besoin du code dans un seul contrôleur, vous feriez mieux de le mettre dans l'assistant de ce contrôleur. De cette façon, il est automatiquement chargé et à portée de main. De plus, cela a du sens: c'est du code pour aider un contrôleur spécifique.

De toute façon, ne le laissez pas dans votre contrôleur ou essayez de le coincer dans votre vue.

+0

Méthodes d'aide ne sont pas intentionnellement disponibles dans le contrôleur. Je devrais les inclure ou appeler par procuration. Le fichier XLS ne diffère pas beaucoup du fichier XML. Les deux sont utilisés comme format de présentation de données. Et il est absolument correct de générer du XML dans une vue. –

0

Je viens de le faire aujourd'hui pour mon application espère que cela aide pour un excellent o/p; jamais utilisé aucun plugin

contrôleur: def exporter pr = Program.find (session [: pr_id]) têtes [ 'Content-Type'] = "application/vnd.ms-excel" têtes [ 'Contenu -Dispositon '] =' attache; filename = "report.xls" » @voucherdatas = Voucherdata.find_all_by_pr_name (pr.pr_name) extrémité

vue: export.html.erb

gestionnaire" reports/voucherdatas ",: object => @ voucherdatas %>

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

whereever u veulent le lien donne

link_to "Exporter sous Excel", export_reports_url ,: pop-up => true