[RUBY] À propos du contrôleur Rails

Aperçu

Je voudrais expliquer le ** contrôleur ** de l'application Rails.

Ce but

** "Connaître le modèle MVC" ** ・ ** "À propos du rôle du contrôleur" ** ・ ** "Utilisation pratique" **

1. Qu'est-ce qu'un modèle MVC?

C'est l'une des idées pour bien gérer le code lors de la création d'une application. C'est juste une façon de penser, donc ce n'est pas tout à fait correct. Les applications Rails intègrent ce framework MVC.

3 éléments de MVC

** "Modèle Vue Contrôleur" **.   ・ Model ・ ・ ・ Responsable de la logique métier dans le système

View ・ ・ ・ Traitement tel que l'affichage et l'entrée / sortie

Controller ・ ・ ・ Contrôle le modèle et la vue en fonction de l'entrée de l'utilisateur

Flux de traitement MVC dans Rails

  1. ** "Controller" ** reçoit la demande du client

  2. Pour ** "Controller" **, demandez à ** "Model" ** de traiter les données.

  3. ** "Model" ** traite les données de la base de données et renvoie les données au ** "Controller" **

  4. ** "Controller" ** vous demande de traiter les données reçues dans ** "View" **

  5. ** "View" ** crée un formulaire (document HTML) que le client peut voir et le renvoie à ** "Controller" **

  6. ** "Controller" ** renvoie le texte HTML au client en tant que réponse

En répétant 1 à 6, il est établi comme une application Web.

2. À propos du rôle du contrôleur

** Conclusion ** -Exécutez la ** méthode d'action ** du contrôleur spécifié en fonction des informations envoyées depuis le routage. ・ ** Lien avec modèle / vue ** pour renvoyer une réponse au client

Méthode d'action

Cette méthode décrit le contenu de traitement spécifique de l'action spécifiée par le routage.

Image de la méthode d'action


class SamplesController < ApplicationController
  def index
    #Contenu de traitement spécifique
    ......
    ......
  end
end

Dans cet exemple ... Lorsque l'action d'index du contrôleur d'échantillons est spécifiée dans le routage, décrivez la méthode d'action à exécuter sous la forme de def index ... end.

À propos de la coopération avec Model

Objectif

Créer, modifier ou récupérer une base de données via un modèle.

Méthode

Instruisez le modèle à l'aide des méthodes de la classe ActiveRecord dont le modèle hérite. Voici quelques exemples de méthodes.

Méthode Contenu
all Récupérez toutes les données de la base de données
find Obtenez un élément de données dans la base de données
new Générer une nouvelle création de données
save Enregistrer les données dans la base de données

Image de la méthode


  (Nom de la classe de modèle).[Méthode]
  Sample.all

À propos de la coopération avec View

Objectif

Passer les données reçues du modèle à la vue et créer les données de réponse à renvoyer au client.

Méthode

Attribuez des variables d'instance aux données du modèle.

  @samples = Sample.all

Cela rend les données disponibles dans le fichier de vue.

3. Utilisation pratique

Emplacement de réglage du contrôleur

Dans le répertoire ʻapp / controllers Définissez le fichiercontroller name_controller.rb`.

Restrictions de dénomination du contrôleur

Fondamentalement, il devrait être ** "pluriel" **. La raison en est qu'il devine automatiquement les fichiers utilisés par Rails par leur nom. Même s'il peut être au singulier, le développeur doit explicitement écrire le code ou cela provoquera une erreur inattendue.

Nom Exemple Remarques
Nom du contrôleur samples
Nom de la classe du contrôleur SamplesController Affaire de chameau
Nom du fichier du contrôleur samples_controller.rb Cas de serpent

Structure du fichier du contrôleur

Le contenu du fichier du contrôleur ressemble à ceci.

app/controllers/samples_controller.rb


  class SamplesController < ApplicationController
    def index
      #Contenu de traitement spécifique
      ......
      ......
    end
  end

Le fichier de contrôleur créé hérite de la ** "classe ApplicationController" **.

Qu'est-ce que la classe ApplicationController?

app/controllers/application_controller.rb


  class ApplicationController < ActionController::Base
  end

ʻLa classe définie dans le fichier app / controllers / application_controller.rb`. C'est une classe (presque) vide qui hérite juste de la ** ActionController :: Base class **.

En principe, chaque contrôleur hérite de la classe ApplicationController. Il est utilisé lorsque des fonctions communes à toutes les applications (connexion / déconnexion, etc.) sont requises.

Qu'est-ce que la classe ActionController :: Base?

Une classe qui fournit les fonctionnalités de base du contrôleur. Il est responsable de la partie de base liée au traitement des demandes / réponses.

Gestion des paramètres de requête HTTP

Le contrôleur obtient les paramètres de la requête HTTP du client via ** "params method" **.

méthode params

Rails traite implicitement les ** paramètres de requête ** et stocke les données dans des paramètres au format de hachage. Il n'y a aucune différence dans la façon de recevoir des données même lors de l'accès par ** demande GET / demande POST **.

Accès par demande GET

Accédez au serveur Web en incluant le paramètre dans ** "Request URI" ** de la ligne de requête de la requête HTTP. Vous pouvez transmettre des paramètres au ** "format URL" ** et au ** "format de requête" **.

Format d'URL

Lorsque les paramètres de routage suivants sont définis

  Prefix Verb   URI Pattern               Controller#Action
  user   GET    /users/:id(.:format)      users#show

Si vous accédez avec l'URL http: // sample.com / users / 7 Le paramètre «: id» de la requête signifie «7» Dans Rails, il est stocké dans params et la valeur de params [: id] est " 7 ".

app/controllers/users_controller.rb


  class UsersController < ApplicationController
    def show
      params[:id] # "7"
    end
  end

Format de requête

À la fin de l'URL, écrivez "?" Suivi de "nom du paramètre = valeur". S'il y a plusieurs paramètres, connectez-les avec "&" pour les décrire.   En utilisant le même routage dans l'exemple ci-dessus Lorsque vous accédez avec l'URL http: //sample.com/users/7? Keyword = query & num = 10 La valeur de params [: mot-clé] est " query ", et params [: num] est " 10 ".

app/controllers/users_controller.rb


  class UsersController < ApplicationController
    def show
      params[:keyword] # "query"
      params[:num] # "10"
    end
  end

Accès par demande POST

Il s'agit d'une demande qui se produit lorsque le client appuie sur le bouton «Soumettre» lors de la saisie à partir du formulaire. Accédez au serveur Web en incluant les paramètres dans le ** "body" ** de la requête HTTP.

Vous pouvez également envoyer plus de paramètres qu'une requête GET.

Précautions lors de l'enregistrement des paramètres

Lors de la sauvegarde des "paramètres" dans la base de données, utilisez un mécanisme appelé ** "Strong Parameters" **.

Que sont les paramètres forts?

C'est un mécanisme pour éliminer la vulnérabilité de "Mass Assignment" qui était utilisée jusqu'à la série Rails3. Dans "Mass Assignment", les informations des paramètres liés à la sauvegarde ont été décrites dans ** model **. Dans "Paramètres forts", décrivez les informations des paramètres à enregistrer dans ** Controller **.

Strong_Image des paramètres


  class UsersController < ApplicationController
    def create
      @user = User.new(user_params) # user_Créer de nouvelles données à l'aide de la méthode params
      @user.save #Enregistrer dans la base de données via le modèle
    end

    #Les paramètres forts ne sont pas appelés depuis l'extérieur de la classe, donc écrivez-les dans une méthode privée.
    private
    def user_params
      params.require(:user).permit(:name, :age)
    end
  end

Dans cet exemple Dans la méthode ʻuser_params, les paramètres à enregistrer sont spécifiés dans: nameet: age of: user`.

nécessite une méthode

Spécifiez le nom de la table à enregistrer dans la base de données.

méthode de permis

Spécifie le nom de la colonne à enregistrer dans la table de base de données.


C'est tout pour l'explication du contrôleur. Merci beaucoup.

Recommended Posts

À propos du contrôleur Rails
À propos des rails 6
À propos du routage des rails
[Rails] À propos d'ActiveJob,!
[Rails] À propos des fichiers de migration
[Rails 6] À propos des principaux joyaux
[Rails] À propos du hachage actif
À propos de la spécification de version des rails
rails Paramètres forts
[Débutant] À propos de la session Rails
[Rails] Obtenir UserAgent sur le contrôleur
A propos de l'attribution d'un nom aux méthodes de modèle Rails
[Rails] À propos de la structure des dossiers scss
À propos =
[Rails] À propos du test de réponse Rspec
Relation de vue du contrôleur de routage des rails
À propos de la méthode de raclage des rails Mechanize
À propos du symbole <%%> dans Rails erb
[Rails] À propos de la méthode d'assistance form_with [Basic]
Considération sur les rails et l'architecture propre
À propos de method.invoke
[Rails g. Erreur]
À propos de Kotlin
À propos de attr_accessor
Notions de base sur les rails
Rails Examen 1
API Rails
Migration des rails
À propos de l'héritage
À propos de Docker
rails tutry
Modèle [Ruby on Rails], commande de terminal de contrôleur
À propos du printemps ③
À propos d'énumération
[rails] Liste des actions définies dans Controller
[Rails 6.0] À propos de la sauvegarde par lots de plusieurs enregistrements
Fondation Rails
À propos du polymorphisme
À propos facultatif
Mémorandum Rails
À propos du hachage
À propos de JitPack
[Rails] Utiliser la validation sur un contrôleur spécifique
tutoriel sur les rails
rails tutry
tutoriel sur les rails
[Ruby on Rails] Test du contrôleur avec RSpec
À propos de ça ()