Rails - Helper pour afficher un score sous forme d'image
Tagged:

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.
rails helper

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 = 0

while i < star_on
star += image_tag("star.png")
i += 1
end

while 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.

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