Ich benutze ** Rails db: migrate ** selbstverständlich in Rails, aber ich denke, es gibt einige Leute, die es irgendwie benutzen und nicht wissen, was sie tatsächlich tun.
Bis vor kurzem habe ich irgendwie verstanden, dass ** Ah, die Migrationsdatei in der Datenbank ~ ** reflektiert wird.
Als ich mich jedoch eingehend mit dem Thema befasste, fragte ich mich: "Oh, was macht jeder Rails-Befehl überhaupt?". Also fasste ich es in diesem Artikel zusammen.
Aus der Schlussfolgerung ** migrieren ist der Vorgang, bei dem der Inhalt der Migrationsdatei in der Datenbank wiedergegeben wird ** Wird sein.
Dies allein ist jedoch schwach, so dass ich etwas tiefer graben werde.
Zunächst einmal verwendet das Framework namens Ruby on Rails, das grundlegende Erkennungsteil, ein Modell namens MVC.
Ich werde die Details hier weglassen,
Es besteht aus drei Teilen.
rails g model
Bevor wir die Migration verstehen, beginnen wir mit dem Befehl zur Modellerstellung.
Wenn Sie den Befehl rail g model ausführen, werden zwei Dateitypen erstellt, eine Modelldatei und eine Migrationsdatei (genau genommen werden auch automatisch eine Testdatei usw. erstellt).
Jede dieser Dateien
--migrationsdatei → Inhalt, der in DB geändert werden soll --modeldatei → DB- und Rails-Anwendung verbinden
Es gibt eine solche Rolle.
Insbesondere erben alle hier erstellten Modelle von der Klasse ApplicationRecord.
models/user.rb
class User < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
end
Darüber hinaus erbt die übergeordnete Klasse dieser ApplicationRecord-Klasse von ActiveRecord :: Base.
models/application_record.rb
class ApplicationRecord < ActiveRecord::Base
self.abstract_class = true
end
Diese ActiveRecord-Klasse kann die SQL-Syntax übersetzen, die für die Interaktion mit der Datenbank erforderlich ist.
Daher ** können Sie problemlos auf die Datenbank zugreifen und die Daten manipulieren, ohne die SQL-Syntax einzeln schreiben zu müssen **.
Sie sind möglicherweise nicht damit vertraut, wenn Sie über Rails eingeben. In der Regel müssen Sie jedoch eine andere Sprache namens SQL verwenden, um Anweisungen zu überspringen, um auf die Datenbank zuzugreifen und die Daten zu bearbeiten **.
Beispiel für eine SQL-Anweisung
--Tabelle erstellen
CREATE TABLE USERS (
ID INT NOT NULL PRIMARY KEY,
NAME VARCHAR NOT NULL
AGE INT NOT NULL
);
--Daten erstellen(Tisch in Schienen.create(value1, value2…))
INSERT INTO USERS VALUES (1,'Ichihara','');
--Wählen Sie alle Daten aus(Im Schienenmodell.all)
SELECT * FROM USERS
Rails kann diesen ** ActiveRecord ** jedoch verwenden, um ihn automatisch in SQL zu übersetzen und die Datenbank ** mit einer intuitiveren und einfacheren Syntax zu betreiben.
Da Getter und Setter in dieser ActiveRecord :: Base-Klasse automatisch definiert werden, ist es auch möglich, auf den Instanzwert ** zu verweisen, ohne absichtlich ** attr_accessor usw. zu definieren.
Das war's… Es ist sicherlich praktisch, aber was machte es schwierig, Getter und Setter zu verstehen ...
>> Was sind Setter und Getter überhaupt?
rails db:migrate
Nehmen Sie Änderungen an der Datenbank basierend auf der Migrationsdatei vor, die durch Ausführen von Rails db: migrate erstellt wurde. In diesem Fall erstellen Sie beim Erstellen des Modells eine neue Tabelle in der Datenbank für die Migration.
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
Die von ActiveRecord erstellte Tabelle weist die folgenden Merkmale auf.
--Tabellenname ist eine Pluralform des Modells (Post → posts) --id, created_at werden automatisch erstellt
Übrigens, wenn Sie eine Migrationsdatei mit ** Rails g Migration ** erstellen, wird die Änderungsmethode automatisch definiert und Sie können Änderungen an der bereits erstellten Tabelle vornehmen.
xxxxxxxx_oooo.rb
class PasswordDigestToUsers < ActiveRecord::Migration[5.1]
def change
add_column :users, :password_digest, :string
end
end
Das ist alles über Migration.
Ich bin nicht sehr zuversichtlich, daher würde ich mich freuen, wenn Sie in Lees Kommentar auf Fehler hinweisen könnten!
Recommended Posts