[RUBY] Was macht [Rails DB: Migrieren]?

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.

Beim Migrieren wird der Inhalt der Migrationsdatei in der Datenbank wiedergegeben

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.

Über das MVC-Modell

Zunächst einmal verwendet das Framework namens Ruby on Rails, das grundlegende Erkennungsteil, ein Modell namens MVC.

Untitled Diagram.jpg

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.

Untitled Diagram.3png.png

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 Ende

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

Was macht [Rails DB: Migrieren]?
Was ist eigentlich objektorientiert?
Was ist eigentlich objektorientiert?
Was ist Rails Gem Devise?
Was ist Rails Active Record?
PG :: DatatypeMismatch-Fehler beim Heroku-Ausführen von Rails db: migrate
[Rails] Migrationsdatei ändern (Rails DB: Rollback)
[Rails] Was tun, wenn keine Daten in der Datenbank registriert sind?
Verstehen Sie, was die Android-Unterstützung von Dagger2 bewirkt
[Rails] Migrationsdatei ändern (Rails db: rollback STEP =)
Was ist follow_redirect! Folgendes ?: Rails Tutorial Memorandum-Kapitel 7
[Rails] Was ist ein Punkt (.) Oder ein Doppelpunkt (:)?
[heroku] run rail db: migrieren funktioniert nicht
Was ist null? ]]
Was ist nach der Installation von 'devise' 'bootstrap' von gemfile with Rails zu tun, wenn url ein Fehler ist?
Was ist java
Was ist Schlüsselumhang?
Fehler in Docker-Schienen db: migrate (StandardError: Ein Fehler ist aufgetreten, alle späteren Migrationen wurden abgebrochen :)
Was ist Jackson?
Was ist Selbst
Was ist Jenkins?
Was ist ArgumentMatcher?
Was ist IM-Jonglieren?
Was ist params
Was ist SLF4J?
Was ist Fassade? ??
Was ist Java <>?
Was ist Gradle?
Was ist centOS?
Was tun, wenn die bereits verwendete Adresse nach dem Ausführen der Schienen angezeigt wird?
Was ist RubyGem?
Was ist before_action?
Was ist Docker?
Was ist Byte?
Schienen db: 〇〇 Zusammenfassung
Was ist Tomcat?
Was tun, wenn ein Fehler in Rails auftritt? DB: migrate ((StandardError: Ein Fehler ist aufgetreten, diese und alle späteren Migrationen wurden abgebrochen :))
[Rails] Was ist zu tun, wenn Rails db: migrate nicht ausgeführt werden kann, da keine Tabelle vorhanden ist, auf die der externe Schlüssel verweist?
Was tun, wenn ein Fehler auftritt (StandardError: Ein Fehler ist aufgetreten, diese und alle späteren Migrationen wurden abgebrochen :) in Rails db: migrate
Nach dem Upgrade von macOS wurden Schienen unmöglich
[Rails] Was ist der Unterschied zwischen Redirect und Rendering?