[RUBY] Implémenter des itérations dans View en rendant une collection [Rails]

Je pense qu'il est courant d'utiliser chacun dans un modèle de vue, comme lors de l'affichage d'un index.

Rails a une méthode qui vous permet d'afficher le même élément plusieurs fois à l'aide d'un modèle partiel sans avoir à écrire chacun.

Écrire en utilisant chacun

À titre d'exemple, considérons le cas où l'utilisateur est affiché sous forme de tableau. Si vous avez un contrôleur comme celui ci-dessous

users_controller.rb


def index
  @users = User.all
end

Vous pouvez utiliser chacun pour générer une table comme suit:

erb:index.html.erb


<% @users.each do |user| %>
  <tr>
    <td><%= user.name %></td>
    <td><%= user.email %></td>
  </tr>
<% end %>

Rendre la collection à l'aide de virtuels partiels

Vous pouvez utiliser la méthode render pour exprimer la répétition à l'aide de partiels partiels.

erb:index.html.erb


<%= render partial: "user", collection: @users  %>

Préparez un partiel.

erb:_user.html.erb


  <tr>
    <td><%= user.name %></td>
    <td><%= user.email %></td>
  </tr>

Si vous spécifiez une collection dans l'option de collection de la méthode de rendu, le nombre d'éléments et de partiels partiels est incorporé à cette position. Les variables locales dans les partiels partiels sont nommés d'après le nom du partiel.

Si vous renommez le partiel en client

<%= render partial: "client", collection: @users  %>

La variable locale dans le partiel partiel est client.

erb:_client.html.erb


  <tr>
    <td><%= client.name %></td>
    <td><%= client.email %></td>
  </tr>

Veuillez noter qu'il ne s'agit pas de la forme singulière de la variable spécifiée dans la collection. De plus, lors de l'ajout de l'option de collection, partial ne peut pas être omis.

Mauvaise performance de l'écriture

erb:index.html.erb


<% @users.each do |user| %>
  <%= render "user", user: user %>
<% end %>

erb:_user.html.erb


  <tr>
    <td><%= user.name %></td>
    <td><%= user.email %></td>
  </tr>

L'affichage répété de modèles partiels sans utiliser de collection entraînera de mauvaises performances. Lorsque vous appelez le modèle partiel à plusieurs reprises, utilisez l'option de collection.

Abréviation

erb:index.html.erb


<%= render @users %>

erb:_user.html.erb


  <tr>
    <td><%= user.name %></td>
    <td><%= user.email %></td>
  </tr>

Si vous passez une collection comme argument de la méthode de rendu, le nom partiel sera déduit du nom de modèle de l'élément.

à la fin

L'auteur de cet article est un débutant qui commence à peine à apprendre la programmation. Je vous serais reconnaissant si vous pouviez signaler des erreurs.


référence Notes sur les performances lors du rendu des partiels [Guide des rails](https://railsguides.jp/layouts_and_rendering.html#%E3%83%91%E3%83%BC%E3%82%B7%E3%83%A3%E3%83%AB%E3% 82% 92% E4% BD% BF% E7% 94% A8% E3% 81% 99% E3% 82% 8B)

Recommended Posts

Implémenter des itérations dans View en rendant une collection [Rails]
Markdown implémenté dans Rails
Implémenter la fonction d'application dans Rails
Implémenter l'authentification LTI dans Rails
Afficher le calendrier mensuel dans Rails
Implémentez la fonction de connexion dans Rails simplement avec le nom et le mot de passe (1)
Implémenter une fonction de connexion simple dans Rails
Implémenter un formulaire de contact dans Rails
Implémenter la fonction de téléchargement CSV dans Rails
Comment implémenter la fonctionnalité de recherche dans Rails
Comment mettre en œuvre un diaporama en utilisant Slick in Rails (un par un et plusieurs par un)
Spécifier la vue d’origine dans l’application Rails [racine]
Implémenter des transitions de boutons à l'aide de link_to dans Rails
Implémenter un bouton de partage dans Rails 6 sans utiliser Gem
Fonction de publication implémentée par communication asynchrone dans Rails
Mettre en œuvre la fonction de classement par étoiles en utilisant Raty dans Rails 6
Comment séparer .scss par contrôleur dans Rails
[Localisation japonaise] Rails i18n Affichage de la vue de localisation japonaise simplifiée uniquement
[Rails] À propos de la collection lors du rendu partiel (lors du chargement d'un modèle partiel)
Afficher le texte caractère par caractère dans Surface View sur Android
Implémenter la pagination des rails
Group_by dans Rails
[Rails] Afficher le partage
Comment implémenter la connexion invité en 5 minutes sur le portefeuille de rails
Implémenter la fonction de recherche de publication dans l'application Rails (méthode where)
Comment implémenter une fonctionnalité intéressante dans Ajax avec Rails
Certains styles d'écriture répétitive subtilement différents dans la vue Rails
[Rails] Implémentez la fonction d'enregistrement / suppression de carte de crédit dans PAY.JP
Introduire la conception avec Rails pour implémenter la fonctionnalité de gestion des utilisateurs
[Rails] Comment charger JavaScript dans une vue spécifique
[Rails] Comment afficher les images dans la vue