[RUBY] Utilisez la méthode de permutation pour que tous les utilisateurs par défaut se suivent

introduction

Je posterai sur qiita pour la première fois, je suis un débutant. Nous vous serions reconnaissants de bien vouloir signaler toute erreur de formulation.

Dans le portefeuille d'activités de changement d'emploi en cours de création, les utilisateurs des données initiales ont été amenés à se suivre dans seeds.rb. J'ai reçu une réponse comprenant une révision du code d'un ingénieur d'une certaine entreprise à volonté. Concernant ce seeds.rb, il a été souligné que "la logique est anormalement difficile à comprendre".

Seeds.rb avant modification

Le code ci-dessous a fait que les utilisateurs par défaut se suivent.

db/seeds_relationships.rb


19.times do |n| #Répéter le traitement 19 fois
  users = User.all #Attribuer tous les objets Utilisateur aux utilisateurs variables
  user = users.find(n + 1) #Id (n) spécifié à partir de la variable users+1) Attribuez l'objet Utilisateur à l'utilisateur variable
  following = users[0..18] #1 des utilisateurs du tableau dans la variable suivante~Remplacez jusqu'au 19e objet utilisateur
  following.shift(n + 1) #Depuis le début du tableau suivant avec la méthode shift(n+1)Débarrassez-vous d'un élément
  followers = users[0..18] #1 des utilisateurs du tableau dans la variable followers~Remplacez jusqu'au 19e objet utilisateur
  followers.shift(n + 1) #Depuis le début des suiveurs de tableau avec la méthode shift(n+1)Débarrassez-vous d'un élément
  following.each { |followed| user.follow(followed) } #Chaque utilisateur dont l'utilisateur est inclus dans le tableau suivant(followed)Suivre
  followers.each { |follower| follower.follow(user) } #Chaque utilisateur contenu dans le tableau suiveurs(follower)Suit l'utilisateur
end

Vous pouvez le voir en un coup d'œil, mais c'est inhabituellement difficile à comprendre.

Utiliser la permutation Array

L'ingénieur a souligné comme ci-dessus, Qu'est-ce que la permutation? J'ai pensé, et quand je l'ai traduit, j'ai trouvé que cela signifiait «ordre».

Qu'est-ce qu'une séquence?

C'est le nombre de r pièces différentes extraites de n pièces différentes et disposées dans une colonne. [Mathématiques au lycée] Différences d'ordre et de combinaison qui peuvent être vues à partir de 1

C'est un gars comme AB, BA, BC, CB, AC, CA ().

Créer une séquence

[1, 2, 3].permutation do |x|
  p x
end

La séquence suivante est créée à partir des éléments du tableau.

[1, 2, 3]
[1, 3, 2]
[2, 1, 3]
[2, 3, 1]
[3, 1, 2]
[3, 2, 1]

En mettant (n) après permutation, n éléments différents peuvent être extraits et arrangés du tableau.

[1, 2, 3].permutation(2) do |x|
  p x
end
[1, 2]
[1, 3]
[2, 1]
[2, 3]
[3, 1]
[3, 2]

Source: Créer une permutation

Semences modifiées.rb

db/seeds_relationships.rb


users = User.all.to_a
users.permutation(2) do |n|
  n[0].follow(n[1])
end

Le premier utilisateur suit 2,3,4,5… deuxième utilisateur, Le deuxième utilisateur suit le 1,3,4,5… deuxième utilisateur, Le troisième utilisateur suit le 1,2,4,5… troisième utilisateur et devient J'ai pu utiliser la méthode de permutation pour que tous les utilisateurs par défaut se suivent.

[Ajout] Seeds.rb pour une visualisation plus facile

db/seeds_relationships.rb


users = User.all.to_a
users.permutation(2) do |user1, user2|
  user1.follow(user2)
end

J'ai reçu un commentaire et l'ai corrigé. La lisibilité est plutôt bonne!

environnement

Recommended Posts

Utilisez la méthode de permutation pour que tous les utilisateurs par défaut se suivent
Je souhaite utiliser la méthode de désinfection autre que View.
Comment utiliser la méthode link_to
Comment utiliser la méthode include?
[Rails] Comment utiliser la méthode de la carte
[Java] Comment utiliser la méthode toString ()
Lorsque vous souhaitez utiliser la méthode à l'extérieur
Sortie de la façon d'utiliser la méthode slice
Comment utiliser la méthode replace () (Java Silver)
[Introduction à Ruby] Comment utiliser la méthode slice
Comment utiliser la méthode getter / setter (en orientation objet)
Vous empêcher d'accéder aux écrans de modification des publications des autres utilisateurs
Array.map facile à utiliser (&: méthode)
Utilisez Modifier # isStatic pour déterminer si la méthode [Reflection] est statique.
[Rails] N'utilisez pas la méthode de sélection uniquement pour réduire les colonnes!
[Java] J'ai essayé de faire un labyrinthe par la méthode de creusage ♪