Si comme moi vous avez besoin d'afficher un score, un niveau de difficulté ou un coût sous forme d'image comme dans l'exemple ci-dessous, je vais vous expliquez comment je m'y suis pris afin de ne pas dupliquer du code et rester DRY.

J'ai placé ma méthode dans un "helper", un helper est un assistant qui va nous aider à générer les vues, le fait de placer une méthode dans un helper permet de rendre cette fonction réutilisable dans d'autres vues. On peut soit le placer dans application_helper.rb ce qui est global à toute l'application ou alors dans un fichier particulier genre mon_assistant_helper.rb, mais dans ce cas il faudra le charger dans le contrôleur de la façon suivante: "helper: mon_assistant".
J'ai choisi d'écrire ma méthode dans le fichier app/helpers/application_helper.rb (
# display stars on/off
def display_stars(val, tot)
star = ""
star_on = val
star_off = tot - val
i = 0
j = 0while i < star_on
star += image_tag("star.png")
i += 1
endwhile j < star_off
star += image_tag("star_off.png")
j += 1
end
star
end
Le paramètre "val" est le nombre d'étoiles à activer et "tot" est le nombre maximum d'étoile.
"star.png" et "star_off.png" sont deux images identiques mais de couleurs différentes à placer dans public/images
Dans toutes les vues où j'ai besoin d'afficher un score :
<%= display_stars(@item.cost, 3)%>
dans cet exemple @item.cost est mon nombre d'étoiles actives
Les helpers c'est rapide et c'est DRY.
Articles similaires
- Comment choisir son langage/framework de développement web?
- Pourquoi choisir CakePHP au détriment de Ruby on Rails
- Créer un projet subversion chez l'hébergeur Dreamhost
- Rails - moteur de recherche pour l'API Ruby On Rails
- Quel developpeur Rails êtes vous?
- Rails - Pense-bête
- EasyEclipse nouvelle version
- Rails - Des titres dynamiques pour votre application rails
- David H. Hansson on the Future of Rails
- Rails - Déploiement d’une application Rails avec Capistrano (suite)


Salut, Je pense qu'on peut
Salut,
Je pense qu'on peut faire plus simple :
(si le code passe bien )
def display_stars(val, tot)
image_tag("star.png") * val.abs + image_tag("star_off.png") * (tot-val).abs
end
Effectivement c'est plus
Effectivement c'est plus simple.
Pas mal du tout