[Ruby on Rails] Élimination de Fat Controller-First, logic to model-

introduction

Ceci est le premier message. J'ai appris Ruby on Rails à l'école et j'ai eu un programme de refactorisation, mais à ce moment-là, j'étais désespéré de le terminer, et je ne l'avais pas refactoré, donc cette fois j'ai déplacé la logique du contrôleur vers Model et rendu le contrôleur plus propre. J'écrirai la méthode.

Qu'est-ce que Fat Controller en premier lieu?

Il se réfère à l'état du contrôleur où le nombre de lignes du contrôleur lui-même est grand et il est difficile de suivre le flux de traitement (simplement parlant, les perspectives sont mauvaises). À l'école, j'ai écrit toute la logique de Controller sans m'en rendre compte du tout, mais je me bats toujours avec Fat Controller, une application personnelle, car je veux me rapprocher du code de niveau pratique (rires).

Procédure de sculpture

Tout d'abord, nous allons avoir envie de déplacer toute la logique du contrôleur extrêmement gonflée vers Model. Les actions sont suffisantes pour les méthodes publiques décrites dans Controller.

Et je pense qu'il n'y a fondamentalement aucun problème avec Model comme destination pour déplacer la logique.

Exemple: si vous souhaitez extraire uniquement les éléments que l'utilisateur a

Avant de sculpter ↓

ruby:users.controller.rb


def show
  @useritems = Item.includes(:images).where(user_id:(current_user.id)).order(id: "DESC") if user_signed_in?
end

Puisque la fonction d'authentification est implémentée à l'aide de devise, l'identifiant de l'utilisateur actuellement connecté peut être obtenu avec "current_user.id". En d'autres termes, je souhaite extraire les informations de l'élément de l'utilisateur dans Ma page (action Afficher) de l'utilisateur actuellement connecté. Cependant, cette acquisition de données, en fait, est également utilisée dans l'action d'index de "items.controller.rb". Je voudrais donc définir une méthode dans Model et résumer la description pour obtenir l'élément de l'utilisateur.

Tout d'abord, contrôleur

ruby:users.controller.rb


def show
  @useritems = Item.user_items_get(current_user.id) if user_signed_in?
end

Étant donné que "utilisateur_actuel" ne peut pas être utilisé du côté modèle, passez-le en argument.

Puis modèle

Item.rb


def self.user_items_get(user_bigint)
  Item.includes(:images).where(user_id:(user_bigint)).order(id: "DESC")
end

En faisant cela, même l'action d'index de ItemController

ruby:items.cotroller.rb


def index
  @useritems = Item.user_items_get(current_user.id).limit(10) if user_signed_in?
end

Il peut être utilisé comme ça.

Quand il s'agit d'écrire une méthode dans Model et de l'appeler avec Controller, les débutants ont tendance à penser que c'est un gros problème, mais il est important de rendre Controller propre, alors veuillez l'utiliser. (Le nombre de lignes dans cet exemple n'a pas diminué ... lol)

Recommended Posts

[Ruby on Rails] Élimination de Fat Controller-First, logic to model-
Connaissance de base de Ruby on Rails
Comment utiliser Ruby on Rails
[Ruby on Rails] Introduction des données initiales
[Rails] Ajout de la fonction de commentaire Ruby On Rails
[Ruby on Rails] 1 modèle CRUD (routage principal)
Modèle [Ruby on Rails], commande de terminal de contrôleur
Commande de création / suppression de modèle Ruby on Rails
Déployer sur Heroku [Ruby on Rails] Débutant
Préparation à l'introduction de jQuery dans Ruby on Rails
[Ruby on Rails] Notation japonaise de l'erreur
[Ruby on Rails] Comment utiliser redirect_to
[Ruby on Rails] Test de modèle avec RSpec
Explication de Ruby sur rails pour les débutants ①
[Ruby on rails] Implémentation d'une fonction similaire
Bouton [Ruby on Rails] pour revenir en haut
Comment résoudre la construction de l'environnement local de Ruby on Rails (MAC)!
Comment déboguer le traitement dans le modèle Ruby on Rails avec juste la console
Implémentation de la fonction de connexion Ruby on Rails (Session)
[Ruby on Rails] Jusqu'à l'introduction de RSpec
Recommandation de classe de service dans Ruby on Rails
Ruby on Rails ~ Principes de base de MVC et du routeur ~
[Ruby on Rails] Un mémorandum de modèles de mise en page
[Ruby on Rails] Affichage individuel des messages d'erreur
[Ruby on Rails] Comment faire de la destination du lien une partie de l'ID spécifié
[Ruby on Rails] Comment japonaisiser le message d'erreur de l'objet Form (ActiveModel)
Ruby on Rails élémentaire
Principes de base de Ruby on Rails
Association Ruby On Rails
[Introduction] Créer une application Ruby on Rails
Résumé des méthodes de mise à jour de plusieurs colonnes [Ruby on Rails]
[Ruby on Rails] Comment changer le nom de la colonne
[Mis à jour de temps en temps] Ruby on Rails Méthode pratique
[Ruby on Rails] Remplacez l'ID d'URL par le nom de la colonne
Déployer sur Ruby on Rails Elastic beanstalk (Construction de l'environnement)
[Ruby On Rails] Comment réinitialiser DB dans Heroku
Explication de Ruby sur rails pour les débutants ⑥ ~ Création de validation ~
[Ruby on Rails] De la construction de MySQL au changement de base de données
Explication de Ruby on rails pour les débutants ② ~ Création de liens ~
(Ruby on Rails6) Comment créer un modèle et une table
[Ruby on Rails] Fonction de recherche (modèle, formule de sélection de méthode)
Essayez d'utiliser l'attribut de requête Ruby on Rails
Explication de Ruby on rails pour les débutants ⑦ ~ Implémentation Flash ~
Explication de Ruby on rails pour les débutants ④ ~ À propos des règles de dénomination et comment utiliser form_Tag ~