2010-12-06 36 views
2

Salutations. Je suis sûr qu'il y a une façon plus simple de le faire, mais je ne le trouve pas.Rendu d'images dans un répertoire

J'ai un répertoire d'icônes que les utilisateurs peuvent choisir d'inclure dans leur contenu. J'ai une partie pour créer la palette d'icônes pour eux de choisir:

<% @files = Dir['public/images/prompts/*.*'] %> 
<input type="hidden" id="test_prompt_image" value="/images/prompts/default.png" /> 
<% @files.each do |f| %> 
    <div onclick="$('#test_prompt_image').val('<%= f.gsub("public","") %>')" class="MultiColumn"> 
     <img src="<%= f.gsub("public","") %>"/> 
    </div> 
<% end %> 

Les résultats renvoyés par le Dir inclure le chemin complet relatif sur le serveur « public/images/... », mais je supprimer "public" pour le chemin src pour trouver l'image. Y at-il un appel à utiliser au lieu de Dir qui renvoie un URI? J'ai également dérangé avec inclure RAILS_ROOT dans le chemin de répertoire, mais cela m'a donné juste un chemin de fichier plus long pour nettoyer dans un chemin de demande.

Merci!

Répondre

2

Par ailleurs, pour faire les choses comme Rails (et une bonne architecture), déplacer la ligne:

@files = Dir['public/images/prompts/*.*'].map {|f| f.sub('public','') } 

... hors de la vue et dans le contrôleur. Le contrôleur est l'endroit pour configurer les variables et faire l'accès au stockage de données, et la vue est l'endroit où afficher et formater les informations. Et plus loin, je refactoriserais ceci plus en créant une constante pour ce chemin, par ex. dans environnement.rb:

ICON_DIRECTORY_PATH = 'public/images/prompts/' 
+0

Merci pour les conseils supplémentaires. Obtenir ces conseils et rappels dans le contexte de mes questions est extrêmement précieux pour quelqu'un d'aussi novice que moi. – RSG

1

Il suffit de faire la suppression du public lorsque vous prenez la liste des fichiers ...

@files = Dir['public/images/prompts/*.*'].map {|f| f.sub('public','') } 
+0

Merci. C'est certainement un meilleur que ce que j'ai là-haut. Je vais fermer à la fin de la journée s'il n'y a vraiment pas une façon plus propre de le faire. – RSG