Ruby on Rails: Wie migriert man Änderungen an Modellen?

8

Wie kann ich in einer Rails-Anwendung die Änderungen an Modellen migrieren? Zum Beispiel weiß ich, dass wenn ich ein Modell mit dem Befehl "rails g model Person name: string" erzeuge, auch eine Migration erstellt wird. Wenn ich nach diesem Schritt jedoch zum erstellten Modell "Person" gehe und ein neues Attribut hinzufüge, wird dieses neue Attribut automatisch zu einer Migration für spätere Persistenz in der Datenbank hinzugefügt? Oder schaue ich das von der falschen Seite an, und ein Attribut sollte zu einer Migration hinzugefügt und dann zu einem Modell hinzugefügt werden?

Grüße

    
Rui 17.10.2012, 23:29
quelle

3 Antworten

9

Sie können einem Modell kein Attribut hinzufügen, indem Sie die Migrationsdatei erstellen und ausführen - Rails ermittelt, welche Attribute ein Modell basierend auf den Spalten in der Datenbank hat. Allerdings müssen Sie > dem Modell eine Zeile hinzufügen, um das Attribut auf die weiße Liste zu setzen, wenn Sie es über die Massenzuweisung aktualisieren möchten. Deshalb sehen Sie in Activrecord-Modellen häufig eine solche Linie:

%Vor%

Aber das ist optional und nicht unbedingt notwendig, um das Attribut hinzuzufügen.

Um das neue Attribut tatsächlich zu Ihrem Modell hinzuzufügen, erstellen Sie zunächst eine Migration mit:

%Vor%

Dadurch wird die Migrationsdatei im Verzeichnis db / migration / erstellt. (Die Form "AddXXXToYYY" und "RemoveXXXFromYYY" wird von Rails so verstanden, dass sie "eine neue Spalte zum Modell XXX hinzufügen oder entfernen", siehe Dokumentation für Details). In diesem Fall habe ich ein Attribut namens address hinzugefügt, das eine Zeichenkette ist, aber Sie könnten das ändern, was immer Sie wollen.

Um die Datenbank tatsächlich zu aktualisieren, müssen Sie die Migration mit rake :

ausführen %Vor%

Wenn Sie schließlich eine Massenzuweisung für dieses Attribut zulassen möchten, fügen Sie das Attribut zu Ihrer Liste von Argumenten für attr_accessible :

hinzu %Vor%

Das sollte es tun.

    
Chris Salzberg 17.10.2012, 23:45
quelle
2

Wenn Sie das neue Attribut mit attr_accessor hinzufügen, müssen Sie nichts mit Migrationen tun, sondern Ihre Änderungen wird nicht in der Datenbank gespeichert.

Wenn Sie Ihre Änderungen beibehalten möchten, müssen Sie das Attribut mithilfe einer Migration . Sie können einfach eine Textdatei mit der richtigen Struktur erstellen, Migrationen sind nichts Besonderes, aber es ist viel einfacher, auf diese Art rails generate migration AddLastNameFieldToUsers zu generieren. Der Inhalt einer solchen Datei könnte wie folgt aussehen:

%Vor%     
Brad Werth 17.10.2012 23:43
quelle
0

Sie müssen dem Modell keine Attribute direkt hinzufügen. Rails (eigentlich ActiveRecord) leitet es automatisch ab. Für die Liste der Attribute für die Modellklasse sucht AR nach einer Tabelle mit einer Pluralform des Modellnamens (wenn das Modell Auftrag ist, sucht es nach Attributen in der Auftragstabelle). Es ist Teil des Design-Features namens CoC - Convention over Configuration.

Wenn Sie also ein Attribut hinzufügen müssen, müssen Sie eine Migration erstellen, um dieses Feld in die Spalte einzufügen, wie in anderen Antworten erwähnt.

    
Prasanna Natarajan 18.10.2012 04:21
quelle