Décrivez comment afficher la valeur moyenne de l'évaluation de chaque magasin sur la page d'affichage de la liste! L'image ressemble à ceci.
Cette implémentation est
Farstep [Cours de programmation]
[[Ruby on Rails] Créons une fonction de révision d'étoiles (PART1) Comment créer un classement par étoiles avec Ruby on Rails](https://www.youtube.com/watch? v = NOOYABsAip0) est utilisé comme référence.
ruby 2.6.5 Ruby on Rails 6.0.3.3 Bootstrap 4 est utilisé pour certaines marges.
model
class Laundry < ApplicationRecord
def avg_score
unless self.comments.empty?
comments.average(:rate_id).round(1)
else
0.0
end
end
def avg_score_percentage
unless self.comments.empty?
comments.average(:rate_id).round(1).to_f*100/5
else
0.0
end
end
end
Tout d'abord, la valeur moyenne est calculée si le commentaire existe selon qu'il est vide ou non. Utilisez la méthode moyenne pour obtenir la valeur moyenne des noms de colonne. En réglant `` round (1) '', il sera arrondi au deuxième chiffre.
La méthode avg_score_percentage
calcule le pourcentage et le transmet à la vue.
Le code est ci-dessous.
html
<div class="average-score mb-3">
<div class="star-rating ml-2">
<div class="star-rating-front" style="width: <%= laundry.avg_score_percentage %>%">★★★★★</div>
<div class="star-rating-back">★★★★★</div>
</div>
<div class="average-score-display">
(<%= laundry.avg_score %>point)
</div>
</div>
css
.average-score {
display: flex; //★ et points côte à côte
justify-content: center;
}
.star-rating {
position: relative;
width: 5em;
height: 1em;
font-size: 17px;
}
.star-rating-front {
position: absolute;
top: 0;
left: 0;
overflow: hidden; //Masquez la partie qui dépasse la largeur spécifiée.
white-space: nowrap; //Évitez l'emballage lorsque la largeur n'est pas suffisante
color: #ffcc33;
height: 25px;
}
.star-rating-back {
color: #ccc;
}
Nous allons le mettre en œuvre en préparant deux 5 étoiles (★★★★★) et en superposant les deux.
・ .Star-rating-front
・ ・ ・ Spécifiez la largeur en superposant la partie étoile jaune sur le dessus avec "width: <% =undry.avg_score_percentage%>%` `. ・
.Star-rating-back`` ・ ・ ・ Remplissez la partie en étoile grise, la partie qui n'a pas jauni en la plaçant en dessous.
Je pense que les deux points suivants sont les points.
Spécifiez débordement: caché; ''. En spécifiant
overflow: hidden; '', la partie qui s'étend au-delà de la largeur spécifiée est masquée et l'étoile grise derrière elle est affichée.
Si vous ne le spécifiez pas, même si vous spécifiez la largeur, la partie qui s'étend au-delà de la largeur n'est pas masquée, elle sera donc toujours notée 5 étoiles.
débordement: caché;
aucun
En définissant white-space: nowrap; '', il ne s'enroulera pas lorsque la largeur ne sera pas suffisante. En spécifiant cela, les points après la virgule décimale seront également reflétés dans les étoiles.
white-space: nowrap; `` Oui
espace blanc: nowrap;
aucun
Vous pouvez désormais afficher la note moyenne sous forme d'étoile!
Recommended Posts