Send_file : erreur

Bonjour,

Je tente d’utiliser la fonction ‘send_file’ avec un fichier xml par
exemple. J’ai créé une fonction “download” contenant le code suivant
dans mon contrôleur “Controleur” :

def download

  @controleur = Controleur.find(params[:id])
  send_file(RAILS_ROOT+"/"[email protected],
  :disposition => 'attachement',
  :encoding => 'utf8',
  :type => 'text/xml',
  :filename => 'Telecharger')

end

Controleur.chemin = ./emplacement/12345467.xml et RAILS_ROOT contient
C:/Users/session/Documents/provisioning/projetNetbeans/project/project1

Dans ma vue =>>>

<%= link_to(“Telecharger”,
client_path(@client)+download_controleur_path(@controleur))%>

pour avoir une URL de type => clients/1/controleur/1/download

En fait j’obtiens un message d’erreur. Mon second “1” est censé être
l’id de Controleur…

je suis perdu :frowning:

Alors dans l’ordre :

Le 27 mai 09 à 15:02, Babiben ***** a écrit :

 send_file(RAILS_ROOT+"/"[email protected],

Utilise plutôt File.join pour construire tes chemins. Ils seront plus
cross-platform et ca t’évitera plein de misère avec les ‘/’ et autres.

Controleur.chemin = ./emplacement/12345467.xml et RAILS_ROOT contient

Tu vois, ici ton chemin commence par ‘./’ et tu l’accolais à blablabla/
project1 ce qui donnerait blablabla/project1/./emplacement
Ca devrait marcher mais fait gaffe à ne pas mélanger absolue et relatif.

C:/Users/session/Documents/provisioning/projetNetbeans/project/
project1

Dans ma vue =>>>

<%= link_to(“Telecharger”,
client_path(@client)+download_controleur_path(@controleur))%>

pour avoir une URL de type => clients/1/controleur/1/download

Les nested routes c’est mieux pour ça. C’est un peu sale tout ça.

En fait j’obtiens un message d’erreur. Mon second “1” est censé être
l’id de Controleur…

Quel est le message d’erreur ? J’ai l’impression qu’il ne concerne pas
send_file.


Stéphane Akkaoui
http://imeuble.info

C’est bien ce que je te disais. Il faut que tu utilise des nested
ressources au lieu de faire un truc du genre client_path(@client)
+download_controleur_path(@controleur))

Pour avoir ce que tu veux (clients/1/controleur/1/download), il faut
un truc du genre :

map.resources :clients do |clients|
clients.resources : controleurs, member => {:download => :get}
end

Ou plus simplement (mais ne fonctionnera que pour la routes en
question :

map.connect ‘clients/:clients_id/controleur/:controleur_id/
download’, :controller => ‘controleurs’, :action => ‘download’

HTH,

PS: coder en français c’est pas terrible… et fait gaffe aux pluriels
et singuliers…


Stéphane Akkaoui
http://imeuble.info

Le 27 mai 09 à 15:23, Babiben ***** a écrit :

ok, je regarde ça. Merci bien pour les infos.

Je n’en ai pas en fait. Il m’affiche ma page d’erreur personnalisé.
Seulement, il ne m’affiche pas mon fichier ou ne me propose pas de le
telecharger.

Normalement au niveau du controleur en fonction de l’id de “Controleur”,
je recupère le chemin d’accès du fichier. Je le place dans send_file. Je
laisse “attachement” par defaut dans disposition, le type correspond Ã
“text/xml” car ma sortie est suppposée être du xml et enfin dans mon
filename, j’ai choisi telecharger comme ça…

j’ai bien intégré le code suivant dans le fichier routes.rb :

map.resources :controleurs, :member => {:download => :get }

Je précise que je suis sous Netbeans 6.5.1 sous vista.

j’ai désactivé ma page d’erreur et apparemment j’aun problème de route :
No route matches “/clients/1/controleurs/1/download” with
{:method=>:get}

Je suppose que cela vient du fait que mon map resource n’intègre pas la
totalité du chemin ?

En fait, je me mélange un peu les pinceaux. Maintenant, il accepte bien
la route rentrée (http://localhost:3000/clients/1/controleur/2/download)
donc tout semble ok au niveau du fichier routes.rb mais il me met qu’il
ne trouve aucun fichier à cet endroit (logique).

J’ai fait des tests pour vérifier que je passais bien par la fonction
“download” de mon contrôleur. j’ai la preuve que oui (remplit un fichier
texte).

Du coup, je suppose que l’URL passée en paramètre de send_file ne
convient pas. En gros, si je me base sur un Dir.pwd que je place dans ma
vue pour savoir “ou je suis” => il me donne la même chose que mon
RAILS_ROOT. Mon répertoire se trouve juste apres le RAILS_ROOT
(RAILS_ROOT/clients). A l’interieur, il y en a un second qui porte le
nom du client et dans celui-ci il y a un fichier xml.

Ce qui donne : c:/cheminApplinetbeans/clients/monclient/test.xml
C’est ce chemin que j’ai saisi dans send_file.

Est ce que j’ai fait une erreur ?