Wenn ich eine neue Rails 3-Migration mit (zum Beispiel) erstelle
rails g migration tester title:tester user:references
, alles funktioniert gut ... aber wenn ich eine Spalte mit etwas in der Art von:
rails g migration add_user_to_tester user:references
Das Referenzfeld wird nicht erkannt. Kurz gesagt lautet die Frage: Wie füge ich einer Rails-Migration über die Befehlszeile eine Referenzierungsspalte hinzu?
ruby-on-rails
activerecord
migration
Plankton
quelle
quelle
EDIT : Dies ist eine veraltete Antwort und sollte nicht beantragt werden Rails 4.x +
Sie müssen keine Referenzen hinzufügen, wenn Sie Ihrer referenzierten Klasse eine Ganzzahl-ID verwenden können.
Ich würde sagen, der Vorteil der Verwendung von Referenzen anstelle einer einfachen Ganzzahl besteht darin, dass das Modell mit Gehör zu vordefiniert wird. Da das Modell bereits erstellt wurde und bei der Migration eines vorhandenen Modells nicht betroffen ist, geht der Zweck verloren.
Also würde ich stattdessen folgendes tun:
Fügen Sie dann im System Tester manuell Gehör zu: Benutzer hinzu
quelle
Bitte beachten Sie, dass Sie höchstwahrscheinlich auch einen Index für diese Spalte benötigen.
quelle
user.testers
, können Sie den Index weglassen.rails g migration ...
Generierte,add_reference :installs, :device, index: true
das auch den Index erstellt.Mit den beiden oben genannten vorherigen Schritten fehlt Ihnen immer noch die Fremdschlüsseleinschränkung. Das sollte funktionieren:
quelle
Sie können Referenzen in einer Änderungsmigration verwenden. Dies ist ein gültiger Rails 3.2.13-Code:
Vgl.: http://apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/change_table
quelle
down
Methode habe ichActiveRecord::IrreversibleMigration
beim Rollback mit Rails 3.2 bekommen. Ich auch ändern musstechange
zuup
.Durch Ausführen
rails g migration AddUserRefToSponsors user:references
wird die folgende Migration generiert:quelle
Wenn Sie eine Spalte hinzufügen, müssen Sie diese Spalte zu einer Ganzzahl machen und wenn möglich die Schienenkonventionen einhalten. Für Ihren Fall gehe ich also davon aus, dass Sie bereits über Tester- und Benutzermodelle sowie Tester- und Benutzertabellen verfügen.
Um den Fremdschlüssel hinzuzufügen, müssen Sie eine Ganzzahlspalte mit dem Namen user_id (Konvention) erstellen:
Fügen Sie dann dem Testermodell ein Gehorsam hinzu:
Vielleicht möchten Sie auch einen Index für den Fremdschlüssel hinzufügen (dies ist etwas, was die Referenzen bereits für Sie tun):
quelle
Das wird den Trick machen:
quelle
Sie können Ihrem Modell über die Befehlszeile auf folgende Weise Verweise hinzufügen:
Dadurch wird eine Migrationsdatei wie folgt generiert:
Dies funktioniert jedes Mal gut, wenn ich es benutze.
quelle
Für Schienen 4
Der Generator akzeptiert den Spaltentyp als Referenz (auch verfügbar als
belongs_to
).Diese Migration erstellt eine
user_id
Spalte und einen entsprechenden Index:erzeugt:
http://guides.rubyonrails.org/active_record_migrations.html#creating-a-standalone-migration
Für Schienen 3
Der Helfer heißt Referenzen (auch verfügbar als
belongs_to
).Diese Migration erstellt eine
category_id
Spalte des entsprechenden Typs. Beachten Sie, dass Sie den Modellnamen und nicht den Spaltennamen übergeben. Active Record fügt das_id
für Sie hinzu.Wenn Sie polymorphe
belongs_to
Assoziationen haben, fügen Referenzen beide erforderlichen Spalten hinzu:Fügt eine Anhangs-ID-Spalte und eine Zeichenfolgenspalte
attachment_type
mit dem Standardwert von hinzuPhoto
.http://guides.rubyonrails.org/v3.2.21/migrations.html#creating-a-standalone-migration
quelle