[RUBY] L'histoire du refactoring avec un assistant personnel pour la première fois dans une application Rails

introduction

J'ai écrit des applications avec Ruby on Rails J'étais curieux à ce sujet.

Ce type qui accompagne chaque fois que vous créez un contrôleur 〇〇_helper.rb À quoi sert ce fichier ... Puisqu'il dit helper, est-ce lié aux méthodes d'assistance ...

En ce moment, je "Ce doit être un fichier pratique car il est créé en même temps." J'ai cherché dans Qiita des articles de commentaires car j'étais intéressé.

Conclusion

Cela ressemble à un fichier qui décrit votre propre méthode d'assistance. (Aide personnelle == aide personnalisée) Depuis que la méthode d'assistance n'a utilisé que les choses fournies par Gem jusqu'à aujourd'hui J'ai pensé intuitivement que ce serait utile.

J'ai essayé de l'utiliser immédiatement

Je ferai référence aux articles Qiita d'autres personnes Cette fois, je l'ai utilisé pour la refactorisation du code de mon application développée personnellement. Le contenu du refactoring dans le contrôleur est le contenu de cet article.

environnement

Rails 5.2.3 Ruby 2.5.1

Comment utiliser

Tout d'abord, regardons le contrôleur qui refactorise.

users_controller.rb


class UsersController < ApplicationController

~réduction~

  private
  def set_user
    @user = User.find(params[:id])
  end

  def check_user
    redirect_to new_user_registration_path, alert: 'S'il vous plaît vous connecter ou vous inscrire' unless current_user.id == @user.id
  end
end

Parce que le moins que sauf dans la méthode appelée check_user n'est pas cool Créez une méthode d'assistance et modifiez-la.

helpers/users_helper.rb


module UsersHelper

  def current_user?(user)
    current_user.id == user.id
  end

end

J'ai créé une méthode d'assistance appelée current_user?. Ce nom et ce contenu de méthode semblent être assez standard.
Directement sous le répertoire appelé helpers Il existe également un fichier appelé application_helper.rb C'est comme un fichier qui gère les méthodes d'assistance que vous appliquez à plusieurs contrôleurs et vues.

users_controller.rb


class UsersController < ApplicationController
  include UsersHelper

~réduction~

  private
  def set_user
    @user = User.find(params[:id])
  end

  def check_user
    redirect_to new_user_registration_path, alert: 'S'il vous plaît vous connecter ou vous inscrire' if !current_user?(@user)
  end
end

La description

Lorsque vous utilisez le propre assistant du fichier d'assistance dans le contrôleur Il semble qu'il faut lire avec include comme dans la deuxième ligne.

De plus, la description "sauf" a été remplacée par "si! ~". Cela a rendu le code un peu plus propre.

Refactorisez posts_controller avec un contenu similaire.

posts_controller.rb


class PostsController < ApplicationController
  

  def edit
    redirect_to new_user_registration_path, alert: 'Veuillez vous connecter' unless current_user.id == @a_post.user_id
  end

  def destroy
    redirect_to new_user_registration_path, alert: 'Veuillez vous connecter' unless current_user.id == @a_post.user_id
    if @a_post.destroy
      redirect_to root_path, notice: 'Message supprimé'
    else
      render :show, notice: 'Le message n'a pas pu être supprimé'
    end
  end


  private

  def set_post
    @a_post = Post.find(params[:id])
  end
end

Ici aussi, nous modifierons la description ci-dessous à moins que.

Tout d'abord, créez une méthode d'assistance.

helpers/posts_helper.rb


module PostsHelper

  def current_user_post?(a_post)
    current_user.id == a_post.user_id
  end

end

Nous appliquerons cela au contrôleur.

posts_controller.rb


class PostsController < ApplicationController
  include PostsHelper

  def edit
    redirect_to new_user_registration_path, alert: 'Veuillez vous connecter' if !current_user_post?(@a_post)
  end

  def destroy
    redirect_to new_user_registration_path, alert: 'Veuillez vous connecter' if !current_user_post?(@a_post)
    if @a_post.destroy
      redirect_to root_path, notice: 'Message supprimé'
    else
      render :show, notice: 'Le message n'a pas pu être supprimé'
    end
  end

  private

  def set_post
    @a_post = Post.find(params[:id])
  end
end

Ceci est également terminé après le chargement de l'assistant et la refactorisation.

finalement

Cette fois, j'ai écrit un article axé sur le contrôleur, mais il peut être utilisé non seulement pour les assistants personnels, mais aussi pour les vues. De plus, lorsque vous l'utilisez pour une vue, contrairement au contrôleur, il semble qu'il n'y ait pas besoin de décrire la lecture. Je vais également refactoriser le code dans le fichier de vue après cela.

Si vous trouvez des lacunes, veuillez nous en informer dans les commentaires.

Article de référence

Recommended Posts

L'histoire du refactoring avec un assistant personnel pour la première fois dans une application Rails
L'histoire de la création d'un proxy inverse avec ProxyServlet
Une histoire remplie des bases de Spring Boot (résolu)
Une histoire sur l'utilisation de l'API League Of Legends avec JAVA
Une histoire qui a eu du mal avec l'introduction de Web Apple Pay
[Rails6] Créer une nouvelle application avec Rails [Débutant]
[Rails 5] Créer une nouvelle application avec Rails [Débutant]
Comment décorer CSS sur les boutons radio de rails6 form_with (helper)
L'histoire de la création d'un lanceur de jeu avec une fonction de chargement automatique [Java]
L'histoire de la sortie de l'application Android sur le Play Store pour la première fois.
L'histoire de l'apprentissage de Java dans la première programmation
Publiez l'application avec ruby on rails
L'histoire du réglage de l'application Android avec libGDX
Une revue du code utilisé par les rails débutants
[Jackson] Une histoire sur la conversion de la valeur de retour du type BigDecimal avec un sérialiseur personnalisé.
Ecrire un test en mettant en œuvre l'histoire de M. Nabeats dans le monde avec du rubis
Première application réalisée par un ingénieur diplômé du secondaire-Introduction-
À peu près le flux de développement d'applications Web avec Rails.
L'histoire de la création de DTO, semblable à Dao avec Java, SQLite
L'histoire du transfert d'un conteneur Docker vers le registre de packages GitHub et Docker Hub avec des actions GitHub
L'histoire de la création d'une version Java du serveur Minecraft avec GCP (et également de la création d'une liste blanche)
[Premier message] Une histoire sur un deuxième nouveau diplômé de l'Université d'éducation physique devenant un programmeur inexpérimenté
Histoire de créer une application de gestion de tâches avec Swing, Java
[Rails] J'ai essayé de créer une mini application avec FullCalendar
La première application WEB avec Spring Boot-Making a Pomodoro timer-
Résumé du travail initial lors de la création d'une application avec Rails
Vérifier le fonctionnement de deux rôles avec une application de chat
Une note sur la fonction de départ de Ruby on Rails
Une histoire à laquelle j'étais accro avec toString () d'Interface qui était proxy avec JdkDynamicAopProxy
Une série d'étapes pour créer des livrables pour les portefeuilles avec Rails
Expliquez les mérites du modèle d'État avec le jugement de notation du film
Trouvez le nombre de jours dans un mois avec Kotlin
Modéliser Digimon avec DDD pour la première fois Partie 1
Une histoire bloquée avec NotSerializableException
Créez un grand nombre d'enregistrements avec une seule commande à l'aide du fichier seeds.rb Ruby on Rails
Lorsqu'un débutant crée une application personnelle avec des rails, la procédure pour l'amener au point de départ de toute façon.
Essayez d'imiter l'idée d'un tableau à deux dimensions avec un tableau à une dimension
[Rails] J'ai créé une mini-application de calendrier simple avec des spécifications personnalisées.
Une histoire sur la connexion à un serveur CentOS 8 avec un ancien Ansible
L'histoire de toString () commençant par le passage d'un tableau à System.out.println
L'histoire de la création d'un jeu d'Othello de type communication avec Scala.
L'histoire de l'arrêt parce que le test des rails n'a pas pu être fait
[Illustration] Recherche de la somme des pièces avec une fonction récursive [Ruby]
[Auto-apprentissage] Création d'un portfolio (application d'origine) après avoir terminé le didacticiel Rails
L'histoire de rendre possible la construction d'un projet qui a été construit par Maven avec Ant
Une histoire à laquelle j'étais accro à deux reprises avec le paramètre de démarrage automatique de Tomcat 8 sur CentOS 8
Je voulais écrire un processus équivalent à une instruction while avec l'API Java 8 Stream
Exporter (sortie) une grande quantité de csv comme les informations de journal sur l'application WEB avec l'application Rails
[Rails] Vérifiez le contenu de l'objet
[Édition Java] Histoire de la sérialisation
Explication de l'ordre des itinéraires ferroviaires
Créer une application de minuterie avec de la boue