** 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.
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.
Tout d'abord, la partie de reconnaissance de base, le framework appelé Ruby on Rails utilise un modèle appelé MVC.
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.
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
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