[RUBY] À propos du routage des rails

Aperçu

Nous avons résumé le routage dans les applications Rails.

Ce but

Vérifiez «l'effet du routage» et «l'utilisation pratique».

<1> Effet du routage

** Conclusion ** -Il sera possible de transmettre le traitement au contrôleur et l'action en fonction de la requête HTTP. Les méthodes -Helper vous permettent de créer des chemins et des URI dans les contrôleurs et les vues.

Comment spécifier le contrôleur et l'action

Lors du routage, les requêtes HTTP des clients sont triées par le code suivant.

Image du routage


  [Méthode HTTP] '[Chemin URI]', to: '[Nom du contrôleur]#[Nom de l'action]'

Exemple) get 'samples', to: 'samples#index'

En d'autres termes, dans cet exemple ...

Lorsque le client accède avec ** "méthode GET" ** et ** "chemin des échantillons" ** Processus avec ** "action d'indexation" ** du ** "contrôleur d'échantillons" ** de l'application Rails

Cela signifie que · · ·

Les assistants de chemin et d'URL seront disponibles dans les contrôleurs et les vues

En décrivant le routage, vous pouvez utiliser ** "\ _path method" et "\ _url method" ** dans l'application Rails. Cette méthode permet de décrire la méthode redirect_to dans le contrôleur, la méthode link_to dans la vue, etc. en utilisant path.

\ _ Méthode Path ・ \ _ Méthode url

C'est une méthode d'assistance qui génère facilement des chemins et des URL en l'utilisant comme ** "[Préfixe] \ _ chemin" ** ou ** "[Préfixe] \ _ url" **.

<2> Utilisation pratique

Emplacement des paramètres de routage

Ce sera le fichier config / routes.rb.

config/routes.rb


  Rails.application.routes.draw do
    get 'samples', to: 'samples#index'
  end

Comment vérifier le routage

Vous pouvez le vérifier en exécutant la commande rails routes dans le répertoire de l'application à l'aide du terminal.

Terminal


   (Répertoire des applications)$ rails routes

      Prefix    Verb    URI Pattern             Controller#Action
     samples    GET     /samples(.:format)      samples#index

** "Prefix", "Verb", "URI Pattern", "Controller # Action" ** sont affichés. Déterminez le contenu de la requête HTTP en combinant ** "Verb and URI Pattern" ** ** "Controller # Action" ** indique où passer le processus.

Quel est le préfixe

C'est comme une variable utilisée lors de l'utilisation de la "méthode \ _path" et de la "méthode \ _url".

Exemple) samples_path => "/ samples"     samples_url   =>  " http://sample.com/samples "

Qu'est-ce que Verb (verbe HTTP)?

C'est une méthode HTTP qui détermine le traitement.

Qu'est-ce que le modèle URI?

C'est le chemin de l'URI à traiter.

Qu'est-ce que Controller # Action?

Ce sera le nom du contrôleur et le nom de l'action pour passer le processus.

7 actions de base

Rails a ** "7 types d'actions" ** qui sont utilisés en standard.

Nom de l'action Utilisation conforme
index liste
new Afficher le nouveau formulaire de données
create Enregistrer de nouvelles données
show Afficher des données spécifiques
edit Afficher le formulaire d'édition de données spécifiques
update Mettre à jour des données spécifiques
destroy Supprimer des données spécifiques

Comment écrire un routage de base

Il peut être divisé en deux. ** "Paramètres individuels" ** et ** "Paramètres de lot" **.

cadre individuel

C'est le code qui définit le routage ** ligne par ligne **.

  Rails.application.routes.draw do
    get  'samples',     to: 'samples#index'
    post 'samples',     to: 'samples#create'
    put  'samples/:id', to: 'samples#update'
  end

Configuration en masse (routage basé sur les ressources)

Vous pouvez écrire plusieurs paramètres de routage dans un code court.

resources (ressources plurielles)

C'est un code qui permet de définir le routage de ** 7 actions ** sur une seule ligne.

  Rails.application.routes.draw do
    resources :samples
  end

Identique au routage configuré individuellement suivant

  Rails.application.routes.draw do
    get    'samples',          to: 'samples#index'
    post   'samples',          to: 'samples#create'
    get    'samples/new',      to: 'samples#new',   as: 'new_sample'
    get    'samples/:id/edit', to: 'samples#edit',  as: 'edit_sample'
    get    'samples/:id',      to: 'samples#show',  as: 'sample'
    patch  'samples/:id',      to: 'samples#update'
    put    'samples/:id',      to: 'samples#update'
    delete 'samples/:id',      to: 'samples#destroy'
  end
* En option

En définissant ** "comme: 'XXX'" **, vous pouvez spécifier "XXX" ** dans ** Préfixe.

ressource (ressource de formulaire unique)

C'est un code qui permet de définir le routage de 6 actions ** autres que l'action d'index ** sur une ligne. Il est utilisé lorsque ** chaque utilisateur n'a qu'une seule information (ressource) dans la conception de l'application. Comme il ne contient qu'une seule information, il n'y a pas d'action d'index (listant plusieurs ressources) ** ": id" ** n'est pas ajouté au chemin URI.

Notez également que ** les contrôleurs sont au pluriel **.

  Rails.application.routes.draw do
    resource :sample  #C'est sous la forme singulière
  end

Identique au routage configuré individuellement suivant

  Rails.application.routes.draw do
    post   'sample',          to: 'samples#create'
    get    'sample/new',      to: 'samples#new',   as: 'new_sample'
    get    'sample/edit',     to: 'samples#edit',  as: 'edit_sample'
    get    'sample',          to: 'samples#show',  as: 'sample'
    patch  'sample',          to: 'samples#update'
    put    'sample',          to: 'samples#update'
    delete 'sample',          to: 'samples#destroy'
  end

Comment écrire un routage avancé

Restrictions de routage basées sur les ressources

Lorsque vous souhaitez utiliser certaines des ressources / actions de routage de ressources ** Spécifiez "uniquement option" ** et ** "sauf option" **.

  Rails.application.routes.draw do
    #N'utilisez que des actions d'indexation / d'affichage
    resources :users, only: [:index, :show]

    #Utiliser des actions autres que index / afficher / modifier / mettre à jour / détruire
    resources :books, except: [:index, :show, :edit, :update , :destroy]
  end
   $ rails routes

    Prefix Verb   URI Pattern               Controller#Action
     users GET    /users(.:format)          users#index 
      user GET    /users/:id(.:format)      users#show
     books POST   /books(.:format)          books#create
  new_book GET    /books/new(.:format)      books#new

Ajouter une action pour le routage basé sur les ressources

En plus des sept actions de base de Rails, vous pouvez ajouter des actions avec ** "routage de membre" ** et ** "routage de collection" **.

Qu'est-ce que le routage des membres?

Il s'agit d'une méthode de routage qui inclut ** ": id" ** dans le chemin URI.

routage des membres


  Rails.application.routes.draw do
    resources :photos do
      member do
        get 'preview'
      end
    end
  end
  $ rails routes

         Prefix Verb   URI Pattern                   Controller#Action
  preview_photo GET    /photos/:id/preview(.:format) photos#preview
         photos GET    /photos(.:format)             photos#index

Qu'est-ce que le routage de collecte?

Il s'agit d'une méthode de routage qui n'inclut pas le chemin URI ** ": id" **. Le code est écrit de la même manière que le routage des membres.

Ce qui change en fonction de la présence ou de l’absence de ": id" dans le chemin de l’URI

«Id» est le numéro de gestion des données enregistrées dans l'application. La présence d'un "id" dans le chemin signifie que "lors de l'exécution de cette action, le numéro de contrôle identifie les données requises".

Par exemple, si vous expliquez avec 7 actions de base de Rails Les ** actions index / new / create ** n'ont pas d '"id" dans le chemin. La raison en est que ** aucune donnée spécifique ** n'est nécessaire pour afficher la liste, et ** les données à enregistrer ** n'ont pas d '"identifiant".

Au contraire, ** afficher / modifier / mettre à jour / détruire les actions ** ** Parce que vous pouvez afficher, modifier ou supprimer des données enregistrées spécifiques ** Sans le "id" ** je ne sais pas quelles données **, donc le chemin contient le "id".

Routage des ressources imbriquées

Qu'est-ce que la nidification

Cela signifie «imbriqué». Indique que l'élément enfant est décrit dans l'élément parent dans une structure imbriquée dans le routage.

Exemple)Routage des ressources imbriquées


  Rails.application.routes.draw do
    resources :books do
      resources :reviews
    end
  end

Dans cet exemple, l'élément parent appelé books a un élément enfant appelé reviews imbriqués.

Effet sur le routage

Le routage imbriqué vous permet d'associer un élément parent au routage d'un élément enfant. Dans le cas de l'exemple ci-dessus, les avis (éléments enfants) sont toujours liés à un livre spécifique (élément parent). Si vous vérifiez le routage des avis (élément enfant), cela ressemblera à ceci.

          Prefix Verb   URI Pattern                                Controller#Action
    book_reviews GET    /books/:book_id/reviews(.:format)          reviews#index
                 POST   /books/:book_id/reviews(.:format)          reviews#create
 new_book_review GET    /books/:book_id/reviews/new(.:format)      reviews#new
edit_book_review GET    /books/:book_id/reviews/:id/edit(.:format) reviews#edit
     book_review GET    /books/:book_id/reviews/:id(.:format)      reviews#show
                 PATCH  /books/:book_id/reviews/:id(.:format)      reviews#update
                 PUT    /books/:book_id/reviews/:id(.:format)      reviews#update
                 DELETE /books/:book_id/reviews/:id(.:format)      reviews#destroy

Les éléments ** "Prefix" ** et ** "URI Pattern" ** ont un effet d'imbrication.

Effet sur le préfixe

L'élément parent vient avant l'élément enfant. C'est un préfixe qui contient des éléments parents (livres) tels que book_reviews et new_book_review.

Effet sur le modèle d'URI

L'élément enfant est précédé de l'élément parent et de l'ID de l'élément parent. Ce sera un motif URI contenant un élément parent (livre) appelé / books /: book_id / reviews. La partie / books /: book_id est le chemin qui représente un élément parent spécifique "À quel élément parent l'élément enfant est connecté" sera explicitement affiché.

C'est tout.

Recommended Posts

À propos du routage des rails
À propos des rails 6
Principes de base du routage des rails
Résumé du routage Rails 6.0
[Rails] À propos d'ActiveJob,!
À propos du contrôleur Rails
[Rails] À propos des fichiers de migration
[Rails 6] À propos des principaux joyaux
Erreur de routage Catch Rails
[Rails] À propos du hachage actif
[Rails] Concevoir un résumé de routage associé
À propos de la spécification de version des rails
[Note] Confirmation de routage Rails3
[Rails] Paramètres d'acheminement complets
[rails] concevoir les valeurs par défaut
rails Paramètres forts
[Débutant] À propos de la session Rails
À propos des ressources qui génèrent un routage RESTful pour Rails
A propos de l'attribution d'un nom aux méthodes de modèle Rails
[Rails] À propos de la structure des dossiers scss
À propos =
routage
[Rails] À propos du test de réponse Rspec
Relation de vue du contrôleur de routage des rails
Comment écrire le routage Rails
À propos de la méthode de raclage des rails Mechanize
Rails routage des ressources singulières par ressource
À propos du symbole <%%> dans Rails erb
[Rails] À propos de la mise en œuvre de la fonction similaire
[Rails] Résumé de la configuration de routage compliquée
Définir autre chose que l'ID pour le routage Rails
[Rails] À propos de la méthode d'assistance form_with [Basic]
Ruby On Rails conçoit un conflit de routage
Considération sur les rails et l'architecture propre
À propos de method.invoke
[Rails g. Erreur]
À propos de Kotlin
Notions de base sur les rails
À propos de Hinemos
API Rails
Migration des rails
À propos de l'héritage
[Rails] first_or_initialize
À propos de Docker
rails tutry
[Ruby on Rails] 1 modèle CRUD (routage principal)
À propos du printemps ③