Probleme d'affichage - Ruby sinatra

Par Keven Larouche, il y a 7 ans


Bonjour,

Voila je rencontre un petit problème avec mon code.

Ce que je fais

Je suis présentement en apprentissage avec ruby Sinatra. Un peu moins complexe que Rails (à mon avis)
Pour l'instant je n'ai pas grand chose de fais mais j'ai un petit problème d'affichage.

Fichier 1 : /main.rb

require 'rubygems' require 'sinatra' configure { set :bind, '62.4.16.140' set :port, 8080 } Dir["#{File.dirname(__FILE__)}/lib/*.rb"].each do |file| require file end get '/' do erb :home end get '/admin' do erb :admin end post '/admin' do login = params[:login] password = params[:pwd] if login == "admin" && password == "admin" putsDir("/home").each do |fichier| "Dossiers : #{fichier}" end else erb :home end end

Fichier 2 : /lib/functions.rb

def putsDir(directory) contenu = Dir.entries(directory) return contenu end

Lorsque j'arrive bien à mettre admin/admin comme credentials, il ne listera pas les dossiers avec la boucle each, mais il listera les répertoires/fichiers à partir de la fonction "putsDir"

### Ce que je veux Dossiers : . Dossiers : .. Dossiers : file.txt Dossiers : niolith Dossiers : test ### Ce que j'obtiens Je ne sais pas d'où il print à l'écran avec cette structure : ...file.txtniolithtest

1 réponse

Takeback, il y a 7 ans

Bonjour,

Je ne sais pas si tu as réussi à résoudre le problème avant que je réponde (un peu tard, certes), mais il me semble que Sinatra rend ce qui a été retourné par le bloc, dans ce cas là, c'est celui-là :

post '/admin' do login = params[:login] password = params[:pwd] if login == "admin" && password == "admin" putsDir("/home").each do |fichier| "Dossiers : #{fichier}" end else erb :home end end

Or, un #each renvoie l'objet non muté. Ce que tu cherchais à faire (donc muter les valeurs du tableau) se fait en utilisant #map ou #collect (ce sont des synonymes, mais prévilégie #map).