[RUBY] Après tout, que fait [rails db: migrate]?

** rails db: migrate ** est utilisé naturellement dans Rails, mais en réalité, certaines personnes peuvent ne pas savoir ce qu'elles font réellement.

Jusqu'à récemment, j'ai en quelque sorte compris que ** Ah, le fichier de migration est reflété dans la base de données ~ **.

Cependant, alors que j'étudiais en profondeur, je me suis demandé: "Que fait chaque commande Rails après tout?", Je l'ai donc résumé dans cet article.

migrer consiste à refléter le contenu du fichier de migration dans la base de données

De la conclusion ** migrate consiste à refléter le contenu du fichier de migration dans la base de données ** Sera.

Cependant, cela seul est faible, je vais donc creuser un peu plus loin.

À propos du modèle MVC

Tout d'abord, la partie de reconnaissance de base, le framework appelé Ruby on Rails utilise un modèle appelé MVC.

Untitled Diagram.jpg

Je vais omettre les détails ici,

--Exécuter une action en réponse à la demande du serveur ** Controller ** --Échange avec la base de données (DB) ** Modèle ** rails g model

Il se compose de trois parties.

rails g model

Avant de comprendre la migration, commençons par la commande de création de modèle.

Lorsque vous exécutez la commande rails g model, deux types de fichiers, un fichier de modèle et un fichier de migration, sont créés (à proprement parler, un fichier de test, etc. sont également créés automatiquement).

Chacun de ces fichiers

--migration file → Contenu à changer en DB --model file → Application Connect DB et Rails

Il y a un tel rôle.

Untitled Diagram.3png.png

En particulier, tous les modèles créés ici héritent de la classe appelée ApplicationRecord.

models/user.rb


class User < ApplicationRecord
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
end

En outre, la classe parente de cette classe ApplicationRecord hérite d'ActiveRecord :: Base.

models/application_record.rb


class ApplicationRecord < ActiveRecord::Base
  self.abstract_class = true
end

Cette classe ActiveRecord a la capacité de traduire la syntaxe SQL nécessaire pour interagir avec la base de données.

Par conséquent, ** vous pouvez facilement accéder à la base de données et falsifier les données sans écrire la syntaxe SQL une par une **.

Vous ne le connaissez peut-être pas lorsque vous entrez à partir de Rails, mais vous devez généralement ignorer des instructions en utilisant un autre langage appelé SQL pour accéder à la base de données et manipuler les données **.

Exemple d'instruction SQL


--Créer une table
CREATE TABLE USERS (
    ID    INT NOT NULL PRIMARY KEY,
    NAME  VARCHAR NOT NULL 
    AGE INT NOT NULL
);

--Créer des données(table en rails.create(value1, value2…))
INSERT INTO USERS VALUES (1,'Ichihara','');

--Sélectionnez toutes les données(Modèle en rails.all)
SELECT * FROM USERS

Cependant, Rails peut utiliser cet ** ActiveRecord ** pour le traduire automatiquement en SQL et exploiter la base de données ** avec une syntaxe plus intuitive et simple.

De plus, comme les getters et les setters sont automatiquement définis dans cette classe ActiveRecord :: Base, il est possible de faire référence à la valeur d'instance ** sans définir intentionnellement ** attr_accessor etc.

Je vois… C'est certes pratique, mais ce qui a rendu difficile la compréhension des getters et des setters ...

>> Que sont les setters et les getters en premier lieu?

rails db:migrate

Apportez des modifications à la base de données en fonction du fichier de migration créé en exécutant rails db: migrate. Dans ce cas, créez une nouvelle table sur la base de données pour la migration lors de la création du modèle.

xxxxxxxx_create_users.rb


class CreateUsers < ActiveRecord::Migration[5.1]
  def change
    create_table :users do |t|
      t.string :name
      t.timestamps
    end
  end
end

La table créée par ActiveRecord présente les caractéristiques suivantes.

À propos, si vous créez un fichier de migration avec ** rails g migration **, la méthode de modification est automatiquement définie et vous pouvez apporter des modifications à la table déjà créée.

xxxxxxxx_oooo.rb


class PasswordDigestToUsers < ActiveRecord::Migration[5.1]
  def change
    add_column :users, :password_digest, :string
  end
end

la fin

Tout est question de migration.

Je ne suis pas très confiant, alors j'apprécierais que vous signaliez des erreurs dans le commentaire de Lee!

Recommended Posts

Après tout, que fait [rails db: migrate]?
Qu'est-ce que l'orientation objet après tout?
Qu'est-ce que l'orientation objet après tout?
Qu'est-ce que Rails Gem Concevoir?
Qu'est-ce que Rails Active Record?
Erreur PG :: DatatypeMismatch lors de l'exécution de heroku run rails db: migrate
[Rails] Modifier le fichier de migration (rails db: rollback)
[Rails] Que faire si les données ne sont pas enregistrées dans la base de données
Comprendre ce que fait le support Android de Dagger2
[Rails] Modifier le fichier de migration (rails db: rollback STEP =)
Qu'est-ce que follow_redirect! Suivant?: Rails Tutorial Memorandum-Chapter 7
[Rails] Qu'est-ce qu'un point (.) Ou un deux-points (:)?
[heroku] run rails db: la migration ne fonctionne pas
Qu'est-ce qui est nul? ]
Après avoir installé le gemfile'devise''bootstrap 'avec des rails, que faire lorsque l'url est une erreur
Qu'est-ce que 'java
Qu'est-ce que Keycloak
Erreur dans les rails docker db: migrate (StandardError: Une erreur s'est produite, toutes les migrations ultérieures ont été annulées :)
Qu'est-ce que Jackson?
Qu'est-ce que soi
Qu'est-ce que Jenkins
Qu'est-ce que ArgumentMatcher?
Qu'est-ce que IM-Juggling?
Qu'est-ce que les paramètres
Qu'est-ce que SLF4J?
Qu'est-ce que la façade? ??
Qu'est-ce que Java <>?
Qu'est-ce que Gradle?
Qu'est-ce que centOS
Que faire lorsque l'adresse déjà utilisée est affichée après l'exécution des rails
Qu'est-ce que RubyGem?
Qu'est-ce que before_action?
Qu'est-ce que Docker
Qu'est-ce que Byte?
rails db: 〇〇 Résumé
Qu'est-ce que Tomcat
Que faire lorsqu'une erreur se produit dans les rails db: migrate ((StandardError: Une erreur s'est produite, cette migration et toutes les migrations ultérieures annulées :))
[Rails] Que faire lorsque les rails db: migrate ne peuvent pas être effectués car aucune table n'est référencée par la clé externe
Que faire si vous obtenez une erreur (StandardError: Une erreur s'est produite, cette migration et toutes les migrations ultérieures ont été annulées :) dans rails db: migrate
Après la mise à niveau de macOS, les rails sont devenus impossibles
[Rails] Quelle est la différence entre la redirection et le rendu?