[RAILS] Afficher la valeur moyenne de l'évaluation sous forme d'étoile

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. 1b1a25ccb85f56b8e0a1b46837bd6cd6.png

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.

environnement d'utilisation

ruby 2.6.5 Ruby on Rails 6.0.3.3 Bootstrap 4 est utilisé pour certaines marges.

Détails d'implémentation

Implémentation du modèle

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.

Voir l'implémentation

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.

  1. 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 2609974bbcd16eb7c656c6b0494fe206.png

  2. 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 44bdcca4dc3ecd2c6133f7dd72db666b.png

espace blanc: nowrap; aucun ea00e4658620d7173e5f742fd6b5a946.png

Vous pouvez désormais afficher la note moyenne sous forme d'étoile!

Recommended Posts

Afficher la valeur moyenne de l'évaluation sous forme d'étoile
Créez un formateur personnalisé pour Yellowfin et affichez le moins de la valeur numérique avec △ (triangle)
Comment trouver la valeur totale, la valeur moyenne, etc. d'un tableau à deux dimensions (tableau multidimensionnel) -java
Extrait la valeur de HashMap et renvoie le résultat trié par valeur de valeur sous forme de liste.
Passez un argument à la méthode et recevez le résultat de l'opération comme valeur de retour
Comment afficher 0 sur le côté gauche de la valeur d'entrée standard
Un mémorandum du problème FizzBuzz
Créons une application TODO en Java 5 Changer l'affichage de TODO
[Ruby] Afficher le contenu des variables
Exemple de programme qui renvoie la valeur de hachage d'un fichier en Java
Comment changer la valeur d'une variable à un point d'arrêt dans intelliJ
Afficher le texte en haut de l'image
Samshin sur la valeur du champ caché
Trouvez la différence à partir d'un multiple de 10
Obtenez le chemin défini dans la classe Controller de Spring Boot sous forme de liste
Définir la source de l'ensemble de bibliothèques en tant que dépendance dans IntelliJ en tant que module distinct du projet
Faire une marge à gauche du TextField
Mesurer la taille d'un dossier avec Java
Définir l'heure de LocalDateTime à une heure spécifique
[Ruby] Code pour afficher le jour
Comment afficher le résultat du remplissage du formulaire
Spécifiez la valeur par défaut avec @Builder of Lombok
[Ruby on Rails] Affichage du classement (total, valeur moyenne)
[Jackson] Une histoire sur la conversion de la valeur de retour du type BigDecimal avec un sérialiseur personnalisé.
[Rails] Je souhaite afficher la destination du lien de link_to dans un onglet séparé
Exemple de code pour attribuer une valeur dans le fichier de propriétés à un champ du type attendu