Ich habe ein Benutzermodell, das eine :email
Spalte benötigt (ich habe vergessen, diese Spalte während des anfänglichen Gerüsts hinzuzufügen).
Ich öffnete die Migrationsdatei und fügte hinzu t.string :email
, tat rake db:migrate
und bekam eine NoMethodError
. Dann habe ich die Zeile hinzugefügt
add_column :users, :email, :string
wieder rake db:migrate
wieder NoMethodError
. Vermisse ich hier einen Schritt?
Bearbeiten: Hier ist die Migrationsdatei.
class CreateUsers < ActiveRecord::Migration
def self.up
add_column :users, :email, :string
create_table :users do |t|
t.string :username
t.string :email
t.string :crypted_password
t.string :password_salt
t.string :persistence_token
t.timestamps
end
end
def self.down
drop_table :users
end
end
quelle
add_email_to_users
und NICHTadd_email_to_user
?rails db:migrate
für den letzten Schritt verwenden.t.string :column_x, limit: 10, after: :column_y
(mindestens für Rails 4)Verwenden Sie diesen Befehl an der Rails-Konsole
und
um diese Migration auszuführen
quelle
rails generate migration add_email_to_users email:string
Erzeugt manchmal eine solche MigrationIn diesem Fall müssen Sie manuell ein
add_column
anchange
:Und dann renn
rake db:migrate
quelle
rails generate migration add_email_to_users email:string
dies nachbundle exec rails c
oder nur innerhalb des Terminals ausgeführt werden? 2) Wo wird die generierte Datei abgelegt, nachdem wir die Abfrage ausgeführt haben?Sie können auch tun
Wenn Sie den Tabellen keine Daten hinzugefügt haben. Bearbeiten Sie anschließend die Migrationsdatei, indem Sie die E-Mail-Spalte hinzufügen und dann aufrufen
Dies funktioniert, wenn in Ihrem System Schienen ab Version 3.1 installiert sind.
Eine viel einfachere Methode ist die Änderung. Lassen Sie die Änderung in der Migrationsdatei so sein, wie sie ist. verwenden
Dadurch wird die letzte Migration zurückgesetzt und erneut migriert.
quelle
Um eine Spalte hinzuzufügen, musste ich nur die folgenden Schritte ausführen:
rails generate migration add_fieldname_to_tablename fieldname:string
Alternative
rails generate migration addFieldnameToTablename
Bearbeiten Sie nach der Generierung der Migration die Migration und definieren Sie alle Attribute, die dieser Spalte hinzugefügt werden sollen.
Hinweis : Tabellennamen in Rails sind immer plural (entsprechend den DB-Konventionen). Beispiel mit einem der zuvor genannten Schritte
rails generate migration addEmailToUsers
rake db:migrate
Oder
db/schema.rb
: Fügen Sie die gewünschten Spalten in die SQL-Abfrage ein.Führen Sie diesen Befehl aus:
rake db:schema:load
Warnung / Hinweis
Beachten Sie, dass beim
rake db:schema:load
automatischen Ausführen alle Daten in Ihren Tabellen gelöscht werden.quelle
Wenn ich dies getan habe, anstatt die ursprüngliche Migration zu fummeln, erstelle ich eine neue mit nur der Add-Spalte im oberen Bereich und einer Drop-Spalte im unteren Bereich.
Sie können das Original ändern und erneut ausführen, wenn Sie zwischenzeitlich migrieren. In diesem Fall ist dies jedoch eine Migration, die nicht ordnungsgemäß funktioniert.
Wie aktuell veröffentlicht, fügen Sie die Spalte hinzu und erstellen dann die Tabelle.
Wenn Sie die Reihenfolge ändern, funktioniert es möglicherweise. Wenn Sie eine vorhandene Migration ändern, fügen Sie sie einfach der Erstelltabelle hinzu, anstatt eine separate Spalte zum Hinzufügen hinzuzufügen.
quelle
Sie können das Erzwingen von Tabellenspalten in Tabellen auch mit erzwingen
force: true
, wenn Ihre Tabelle bereits vorhanden ist.Beispiel :
quelle
Sie können bei der Migration auch eine spezielle Methode change_table verwenden, um neue Spalten hinzuzufügen:
quelle
Sie können die letzte Migration um zurücksetzen
oder setzen Sie diese spezifische Migration um zurück
Bearbeiten Sie die Datei und führen Sie sie
rake db:mirgate
erneut aus.quelle
Sie können dies auch tun .. Rails g Migration add_column_to_users email: string
dann rake db: migrate add: email Attribut in Ihrem Benutzer-Controller;
Weitere Informationen finden Sie unter http://guides.rubyonrails.org/active_record_migrations.html
quelle
Sie können einer bestimmten Position auch eine Spalte hinzufügen, indem Sie vor oder nach der Spalte Folgendes verwenden:
Die Migrationsdatei generiert den folgenden Code, außer nach :: email. Sie müssen nach :: E-Mail oder vor :: E-Mail hinzufügen
quelle