2017-06-17 1 views
2

Quelques précisions d'abord. J'essaye tout sur l'environnement de développement local.ruby ​​on rails comment télécharger le fichier csv en utilisant javascript

Dans mon UsersController j'ai une méthode summary_csv qui construit un fichier csv et le stocke dans l'emplacement /tmp/your-csv-file.csv.

Une fois que le système vérifie que le fichier est prêt pour le téléchargement, j'ai un fichier summary_csv.js.erb qui fonctionne javascript pour aider l'utilisateur télécharger le fichier, en particulier, dans summary_csv.js.erb, j'essaie de faire window.location="https://stackoverflow.com/users/download_csv"; et il existe une méthode download_csv dans le contrôleur Users.

Je veux que le téléchargement se produise, mais pas sûr de 2 choses:

  1. Comment dois-je configurer routes.rb pour cette méthode download_csv pour que le téléchargement se passe sans jeter une sorte de « vues manquantes ' Erreur? (à ce stade, je ne me soucie pas si l'utilisateur doit dirigé vers une autre vue ou peut rester sur la même page).

  2. Ce qui devrait aller dans le corps de la méthode download_csv afin que window.location="https://stackoverflow.com/users/download_csv"; va lancer le téléchargement, le fichier situé à /tmp/your-csv-file.csv?

Répondre

0

j'ai fini par trouver la solution. Merci à tous ceux qui ont offert de l'aide

Donc, window.location était la meilleure méthode à utiliser après tout.
1) Réglez-le sur controller/method. 2) send_file de façon appropriée dans le corps de la méthode ci-dessus. 3) Définissez les itinéraires corrects dans le bon ordre.

L'étape 3 était essentielle pour que cela fonctionne.
L'itinéraire pour controller/method doit être configuré exactement pour ne pas confondre Rails avec l'endroit où il doit acheminer votre action.

resources :users do 
    collection do 
    get 'download_csv' => 'specify which controller#which_method_name' 
    end 
end 
1

1) Mettre une méthode get intérieur des utilisateurs des ressources et des collections comme celui-ci

resources :users do 
    collection do 
    get 'download_csv' 
    end 
end 

2) Vous avez juste besoin de send_file, en passant votre chemin de fichier, puisqu'il est prêt.

Résultat

def download_csv 
    send_file(
    "/tmp/your-csv-file.csv", 
    filename: "your_custom_file_name.csv", 
    type: "text/csv" 
) 
end 
+0

i essayé et rien ne se passe ... 'development.log' Says « Sent Fichier » mais rien ne se passe ... je faisais ce sur le serveur de développement local .. peut-être pourquoi? – namesake22

+0

et pour certaines raisons, il déclenche la méthode show' de mes utilisateurs et dit undefined id = download_csv ... – namesake22

+1

@ namesake22 votre méthode show est appelée parce que vous n'avez probablement pas déclaré de route, j'ai essayé de vous dire de déclarer le comme vous le faites pour tous les autres, pour ne pas déclarer hehe. Je vais modifier ma réponse –