Lire un fichier => can't convert StringIO into String

Bonjour,

J’essaye de lire le contenu d’un fichier

<%= form_tag (enseignements_path, :multipart => true ) %>
<%= file_field ‘document’, ‘file’ %>
<%= submit_tag ‘Import’ %>
<%= end_form_tag %>

mon code

def create
if params[:document][:file]
require ‘yaml’
fiche_ens = YAML::load( File.open(params[:document][:file]) )
#flash[:notice] = fiche_ens[“titre”]
else
#@enseignement = Enseignement.new(params[:enseignement])
en
end

Quand je teste le formulaire j’ai ce message

TypeError in EnseignementsController#create

can’t convert StringIO into String

Ou est mon erreur .?

Merci

Y a un truc assez sympa qui s’appelle la doc et elle indique même le
type des paramètres.

http://www.rubycentral.com/book/ref_c_file.html#File.open

2006/11/27, Bolo M. [email protected]:

:slight_smile: tu as fais l’école du rire toi. Avant de poser la question bien
sur que j’ai regardé la doc et j’ai fais une recherche sur google …
Je suis pas complètement a coté la plaque :smiley:

J’ai suivi cette doc qui explique comment chargé un document Yaml
http://yaml4r.sourceforge.net/doc/page/loading_yaml_documents.htm

Je crois que je fais a peu pres ce qu’ils font
readme = YAML::load( File.open( ‘README’ ) )

Le 27 nov. 06 à 02:20, Alexis B. a écrit :

<%= form_tag (enseignements_path, :multipart => true ) %>
#flash[:notice] = fiche_ens[“titre”]


Railsfrance mailing list
[email protected]
http://lists.rubyonrails.fr/mailman/listinfo/railsfrance

Bolo M.
[email protected]
http://blog.developpez.com/index.php?blog=30

Bolo, s’il te plaît, modère tes paroles.

Admet que tu poses beaucoup de questions ici dont la réponse t’est
donné sous forme de lien vers une documentation (très souvent
officielle).

Si certains sont exaspérés, ils peuvent parfois te rudoyer, mais garde
tes réflexions comme “tu as fait l’école du rire”, car tout ce que tu
gagneras c’est que les quelques uns qui prennent encore la peine de te
répondre ne le feront plus du tout.

Sur ce, je t’invite à relire attentivement les différentes
documentations, dont celle que t’as donné Alexis.

Hello,

Bolo M. a écrit :

Je crois que je fais a peu pres ce qu’ils font
readme = YAML::load( File.open( ‘README’ ) )

Alors, primo, tu lis un champ de type file. Si tu examines la doc de
Rails, tu verras qu’un tel champ est sérialisé comme IO, pas comme
String, puisqu’il peut s’agir de n’importe quel contenu binaire. Tu
essaies donc de faire un File.open sur un IO, pas sur un String. En
somme, ton File.open est globalement inutile.

C’est tant mieux d’ailleurs, car faire un open sans garantir le close,
ce n’est pas tip top. Voici un meilleur code quand tu n’as qu’un nom de
fichier et que tu dois donc l’ouvrir toi-même (tiré directement de la
rdoc) :

File.open(‘ton_nom_de_fichier’) do |f|
ton_resultat = YAML::load(f)
# ton code…
end

En utilisant un bloc de traitement comme argument supplémentaire à
l’appel de File.open, tu garantis la fermeture de l’IO quoiqu’il arrive
(exception ou non) : c’est plus clean, et plus court qu’un
begin/rescue/end manuel :wink:

'HTH

J’y connais rien en YAML, mais je pense qu’on doit pouvoir trouver la
réponse ici …?
URL:http://yaml4r.sourceforge.net/doc/page/parsing_yaml_documents.htm
Sinon, regarde la doc de StringIO
URL:http://ruby-doc.org/core/classes/StringIO.html (s’il faut, il faut
faire une espèce de #flash[:notice] = fiche_ens[“titre”].gets , j’sais
pas moi !)

Bon courage…!
++
Benjamin

Bolo M. a écrit :

Bonjour,

J’essaye de lire le contenu d’un fichier
[…]

Benjamin Cabé a écrit :

J’y connais rien en YAML, mais je pense qu’on doit pouvoir trouver la
réponse ici …?
URL:http://yaml4r.sourceforge.net/doc/page/parsing_yaml_documents.htm

Lol… Je t’ai envoyé en lien le même pointeur que tu citais
initialement ^^ Tsss…
J’imagine donc que le pb est bien au niveau du File.open comme semblent
l’indiquer mes petits camarades… Sorry !

Le 27 nov. 06 à 10:56, Guillaume “Zifro” DESRAT a écrit :

Bolo, s’il te plaît, modère tes paroles.

Moi je doit modérer mes paroles …

Admet que tu poses beaucoup de questions ici dont la réponse t’est
donné sous forme de lien vers une documentation (très souvent
officielle).

Je cherche toujours avant de poser des questions, Je ne pose aucune
question sans avoir chercher un minimum même si tu penses le contraire .

Si certains sont exaspérés, ils peuvent parfois te rudoyer, mais garde
tes réflexions comme “tu as fait l’école du rire”, car tout ce que tu
gagneras c’est que les quelques uns qui prennent encore la peine de te
répondre ne le feront plus du tout.

Tu sais j’ai le meme sentiment c’est fatiguant à chaque fois de se
faire prendre de haut, si cette mailing list n’est pas destiné au
débutant ou personne ayant des questions dites le.
Je ne poserais plus de question…

Tu me dis de lire la doc, je vais pas non plus lire toute la doc en 5
jours, je vais rien comprendre …

Sur ce, on laisse tomber

Désolé si j’était agressive

a+


Railsfrance mailing list
[email protected]
http://lists.rubyonrails.fr/mailman/listinfo/railsfrance

Bolo M.
[email protected]
http://blog.developpez.com/index.php?blog=30

Alors, primo, tu lis un champ de type file. Si tu examines la doc de
Rails, tu verras qu’un tel champ est sérialisé comme IO, pas comme
String, puisqu’il peut s’agir de n’importe quel contenu binaire. Tu
essaies donc de faire un File.open sur un IO, pas sur un String. En
somme, ton File.open est globalement inutile.

D’accord je comprends mieux.

En utilisant un bloc de traitement comme argument supplémentaire Ã
l’appel de File.open, tu garantis la fermeture de l’IO quoiqu’il
arrive
(exception ou non) : c’est plus clean, et plus court qu’un
begin/rescue/end manuel :wink:

'HTH

Maintenant que je regarde mon code je me demande. Je peux faire ca

file = params[:document][:file]
YAML::load(file.read)

Je te remerice


Christophe P. aka TDD
[email protected]


Railsfrance mailing list
[email protected]
http://lists.rubyonrails.fr/mailman/listinfo/railsfrance

Bolo M.
[email protected]
http://blog.developpez.com/index.php?blog=30

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs