Suche…


Modell manuell erstellen

Die Verwendung von Gerüsten ist schnell und einfach, wenn Sie noch nicht mit Rails vertraut sind oder wenn Sie eine neue Anwendung erstellen. Später kann es jedoch nützlich sein, dies nur auf eigene Faust zu tun, um zu vermeiden, dass Sie den durch Gerüst erzeugten Code durchlaufen müssen, um sie zu reduzieren (Entfernen Sie nicht verwendete Teile usw.).

Das Erstellen eines Modells kann so einfach sein wie das Erstellen einer Datei unter app/models .

Das einfachste Modell in ActiveRecord ist eine Klasse, die ActiveRecord::Base .

class User < ActiveRecord::Base
end

Modelldateien werden in app/models/ gespeichert und der Dateiname entspricht dem einzigen Namen der Klasse:

# user
app/models/user.rb

# SomeModel
app/models/some_model.rb

Die Klasse übernimmt alle ActiveRecord-Funktionen: Abfragemethoden, Validierungen, Rückrufe usw.

# Searches the User with ID 1
User.find(1)

Anmerkung: Stellen Sie sicher, dass die Tabelle für das entsprechende Modell vorhanden ist. Wenn nicht, können Sie die Tabelle erstellen, indem Sie eine Migration erstellen

Mit dem folgenden Befehl können Sie ein Modell und seine Migration nach Terminal generieren

rails g model column_name1:data_type1, column_name2:data_type2, ...

und kann dem Modell auch einen Fremdschlüssel (Beziehung) mit folgendem Befehl zuweisen

rails g model column_name:data_type, model_name:references

Modell über Generator erstellen

Ruby on Rails bietet einen model , mit dem Sie ActiveRecord-Modelle erstellen können. Verwenden Sie einfach rails generate model und geben Sie den Modellnamen an.

$ rails g model user

Neben der Modelldatei in app/models der Generator außerdem:

  • den Test in test/models/user_test.rb
  • die Fixtures in test/fixtures/users.yml
  • die Datenbank Migration in db/migrate/XXX_create_users.rb

Sie können beim Generieren auch einige Felder für das Modell generieren.

$ rails g model user email:string sign_in_count:integer birthday:date

Dadurch werden die Spalten email, sign_in_count und birthday in Ihrer Datenbank mit den entsprechenden Typen erstellt.

Eine Migration erstellen

Felder in vorhandenen Tabellen hinzufügen / entfernen

Erstellen Sie eine Migration, indem Sie Folgendes ausführen:

rails generate migration AddTitleToCategories title:string

Dies erzeugt eine Migration , die eine fügt title zu einer categories - Tabelle:

class AddTitleToCategories < ActiveRecord::Migration[5.0]
  def change
    add_column :categories, :title, :string
  end
end

Auf ähnliche Weise können Sie eine Migration zum Entfernen einer Spalte rails generate migration RemoveTitleFromCategories title:string : rails generate migration RemoveTitleFromCategories title:string

Dies erzeugt eine Migration , die einen entfernt title Spalt aus den categories Tabelle:

class RemoveTitleFromCategories < ActiveRecord::Migration[5.0]
  def change
    remove_column :categories, :title, :string
  end
end

Während streng genommen Angabe Typ ( :string in diesem Fall) zum Entfernen eine Spalte nicht notwendig ist, ist es hilfreich, da es die notwendigen Informationen zum Walzen zurück zur Verfügung stellt.

Erstellen Sie eine Tabelle

Erstellen Sie eine Migration, indem Sie Folgendes ausführen:

rails g CreateUsers name bio

Rails erkennt die Absicht, eine Tabelle mit dem Präfix " Create , der Rest des Migrationsnamens wird als Tabellenname verwendet. Das gegebene Beispiel generiert Folgendes:

class CreateUsers < ActiveRecord::Migration
  def change
    create_table :users do |t|
      t.string :name
      t.string :bio
    end
  end
end

Beachten Sie, dass die Schaffung Befehl nicht Spaltentypen angeben und das Standard - string verwendet wurde.

Erstellen Sie eine Join-Tabelle

Erstellen Sie eine Migration, indem Sie Folgendes ausführen:

rails g CreateJoinTableParticipation user:references group:references

Rails erkennt die Absicht, eine Join-Tabelle zu erstellen, indem er JoinTable im Migrationsnamen findet. Alles andere wird aus den Namen der Felder bestimmt, die Sie nach dem Namen angeben.

class CreateJoinTableParticipation < ActiveRecord::Migration
  def change
    create_join_table :users, :groups do |t|
      # t.index [:user_id, :group_id]
      # t.index [:group_id, :user_id]
    end
  end
end

Kommentar- der erforderlichen index - Anweisungen und den Rest löschen.

Vorrang

Beachten Sie, dass der Beispiel-Migrationsname CreateJoinTableParticipation der Regel für die Tabellenerstellung entspricht: Er hat das Präfix Create . Es wurde jedoch keine einfache create_table generiert. Dies liegt daran, dass der Migrationsgenerator ( Quellcode ) eine erste Übereinstimmung der folgenden Liste verwendet:

  • (Add|Remove)<ignored>(To|From)<table_name>

  • <ignored>JoinTable<ignored>

  • Create<table_name>

Einführung in Rückrufe

Ein Rückruf ist eine Methode, die zu bestimmten Zeitpunkten des Lebenszyklus eines Objekts aufgerufen wird (direkt vor oder nach dem Erstellen, Löschen, Aktualisieren, Überprüfen, Speichern oder Laden aus der Datenbank).

Angenommen, Sie haben eine Auflistung, die innerhalb von 30 Tagen nach der Erstellung abläuft.

Eine Möglichkeit, dies zu tun, ist wie folgt:

class Listing < ApplicationRecord
  after_create :set_expiry_date

  private

  def set_expiry_date
    expiry_date = Date.today + 30.days
    self.update_column(:expires_on, expiry_date)
  end
end

Alle verfügbaren Methoden für Callbacks lauten in der Reihenfolge, in der sie während des Betriebs jedes Objekts aufgerufen werden:

Ein Objekt erstellen

  • before_validation
  • after_validation
  • before_save
  • around_save
  • vor_erstellen
  • around_create
  • after_create
  • after_save
  • after_commit / after_rollback

Objekt aktualisieren

  • before_validation
  • after_validation
  • before_save
  • around_save
  • vor_update
  • around_update
  • nach dem Update
  • after_save
  • after_commit / after_rollback

Objekt zerstören

  • vor_destroy
  • around_destroy
  • after_destroy
  • after_commit / after_rollback

HINWEIS : after_save wird sowohl beim Erstellen als auch beim Update ausgeführt, jedoch immer nach den spezifischeren Rückrufen after_create und after_update, unabhängig von der Reihenfolge, in der die Makroaufrufe ausgeführt wurden.

Erstellen Sie eine Join-Tabelle mithilfe von Migrationen

Besonders nützlich für has_and_belongs_to_many Beziehung, können Sie manuell eine Join - Tabelle mit der erstellen create_table Methode. Angenommen, Sie verfügen über zwei Modelle, Tags und Proyects , und Proyects diese mithilfe einer has_and_belongs_to_many Beziehung has_and_belongs_to_many . Sie benötigen eine Join-Tabelle, um Instanzen beider Klassen zu verknüpfen.

class CreateProjectsTagsJoinTableMigration < ActiveRecord::Migration
  def change
    create_table :projects_tags, id: false do |t|
      t.integer :project_id
      t.integer :tag_id
    end
  end
end

Der tatsächliche Name der Tabelle muss dieser Konvention folgen: Das Modell, das dem anderen alphabetisch vorangeht, muss zuerst gehen. P roject steht vor T ags, so dass der Name der Tabelle projects_tags lautet.

Da diese Tabelle auch dazu dient, die Zuordnung zwischen den Instanzen von zwei Modellen zu routen, ist die tatsächliche ID jedes Datensatzes in dieser Tabelle nicht erforderlich. Sie geben dies an, indem Sie id: false

Wie in Rails üblich, muss der Tabellenname schließlich die zusammengesetzte Pluralform der einzelnen Modelle sein, aber die Spalte der Tabelle muss in Singularform sein.

Manuelles Testen Ihrer Modelle

Das Testen Ihrer Active Record-Modelle über Ihre Befehlszeilenschnittstelle ist einfach. Navigieren Sie zu dem App - Verzeichnis in Ihrem Terminal und geben Sie in rails console die Rails - Konsole zu starten. Von hier aus können Sie aktive Record-Methoden in Ihrer Datenbank ausführen.

Wenn Sie beispielsweise ein Datenbankschema mit einer Users-Tabelle mit einem name:string und email:string , könnten Sie Folgendes ausführen:

User.create name: "John", email: "[email protected]"

Um diesen Datensatz anzuzeigen, können Sie Folgendes ausführen:

User.find_by email: "[email protected]"

Wenn dies Ihre erste oder einzige Aufnahme ist, können Sie einfach die erste Aufnahme abrufen, indem Sie Folgendes ausführen:

User.first

Verwenden einer Modellinstanz zum Aktualisieren einer Zeile

Angenommen, Sie haben ein User

class User < ActiveRecord::Base
end

Jetzt können Sie zum Aktualisieren des first_name und last_name eines Benutzers mit der id = 1 den folgenden Code schreiben.

user = User.find(1)
user.update(first_name: 'Kashif', last_name: 'Liaqat')

Beim Aufruf von update wird versucht, die angegebenen Attribute in einer einzelnen Transaktion zu aktualisieren. Bei Erfolg wird true andernfalls false .



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow