2017-01-04 2 views
0

Je crée un wiki dans Sinatra et j'ai le code suivant, qui fonctionne, il me semble un peu maladroit. J'essaie d'enregistrer toutes les entrées wiki dans des "pages" et de les afficher sur la page d'accueil sous forme de liens.Obtenir et afficher tous les fichiers dans un dossier sous forme de liens sur la page d'accueil de mon application sinatra

get "/" do 
    @entries = Dir["pages/*.txt"] 
    @entries.map! { |f| f.split '/' } 
    @entries.flatten! 
    @entries.delete_if { |p| p == "pages" } 
    @entries = @entries.sample(5) 
    erb :welcome, layout: :page 
end 

Si n'importe quel génie de rubis voudrait démontrer le rubis éloquent je serais très reconnaissant!

Répondre

1
@entries = Dir["pages/*.txt"]. 
       map { |path| path.split '/' }. 
       flatten. 
       reject { |path| path == 'pages' }. 
       sample(5) 

La chose la plus évidente est de chaîner les appels de méthode. Faire cela conduit également à un style plus "programmation fonctionnelle". Notez comment j'ai remplacé delete_if (qui mute le tableau) avec reject (qui ne fonctionne pas). J'ai également supprimé les méthodes "bang" car l'utilisation de méthodes de mutation est inutile ici. Ce ne devrait pas être la première chose que vous recherchez, car ils peuvent parfois avoir des effets inattendus.

Par exemple, j'ai récemment trouvé un collègue avait écrit return string.gsub!(" ", "") ou quelque chose comme ça. Le problème est gsub! renvoie zéro. En utilisant gsub à la place travaillé.

+0

C'est un bon conseil sur les méthodes bang - merci beaucoup! – matt