Ich habe hier auf SO einige Fragen (nämlich diese ) zum Hinzufügen eines booleschen Standardwerts zu einer vorhandenen Spalte gesehen. Also habe ich den change_column
Vorschlag ausprobiert , aber ich muss ihn nicht richtig machen.
Ich habe es versucht:
$ change_column :profiles, :show_attribute, :boolean, :default => true
Welches kehrt zurück -bash: change_column: command not found
Ich rannte dann:
$ rails g change_column :profiles, :show_attribute, :boolean, :default => true
...und
$ rails change_column :profiles, :show_attribute, :boolean, :default => true
Dann lief rake db:migrate
, aber der Wert für :show_attribute
blieb nil
. In der Frage, auf die ich oben verwiesen habe, heißt es in PostgreSQL, dass Sie es manuell aktualisieren müssen. Da ich PostgreSQL verwende, habe ich bei meiner create_profiles
Migration Folgendes hinzugefügt :
t.boolean :show_attribute, :default => true
Kann mir jemand sagen, was ich hier falsch mache?
quelle
up
Methode in der Migration befinden. Hierbei handelt es sich um eine neue Klasse, die in db / migrate / generiert wird. (Diedown
Methode sollte geschrieben werden, um rückgängig zu machenup
.) Nehmen Sie diese Änderung dann vorrake db:migrate
.def self.up
unddef self.down
show
oder wie auch immer der Spaltenname lautet.Als Variation der akzeptierten Antwort können Sie die
change_column_default
Methode auch in Ihren Migrationen verwenden:Rails API-Dokumente
quelle
show
oder wie auch immer der Spaltenname lautet.show_attribute
ist der Name der Spalte, ich glaube nicht, dass Rails 5 etwas damit zu tun hat, oder?Ich bin nicht sicher, wann dies geschrieben wurde, aber um derzeit einen Standardwert zu einer Spalte in einer Migration hinzuzufügen oder daraus zu entfernen, können Sie Folgendes verwenden:
Schienen 5:
http://edgeguides.rubyonrails.org/active_record_migrations.html#changing-columns
Schienen 4.2:
http://guides.rubyonrails.org/v4.2/active_record_migrations.html#changing-columns
Auf diese Weise können Sie vermeiden, dass Sie in Ihren Migrationen oder im Schema nach den Spaltenspezifikationen suchen.
quelle
null: false
und imdefault: :something
Grunde genommenAuch gemäß dem Dokument:
https://guides.rubyonrails.org/active_record_migrations.html
Es gibt also keinen vorgefertigten Schienengenerator. Wie in den obigen Antworten angegeben, müssen Sie Ihre Migrationsdatei manuell mit der
change_column_default
Methode füllen .Sie können Ihren eigenen Generator erstellen: https://guides.rubyonrails.org/generators.html
quelle
Wenn Sie gerade eine Migration durchgeführt haben, können Sie ein Rollback durchführen und die Migration dann erneut durchführen.
Zum Rollback können Sie so viele Schritte ausführen, wie Sie möchten:
Oder wenn Sie Rails 5.2 oder höher verwenden:
Dann können Sie die Migration einfach erneut durchführen:
Vergiss nicht
rake db:migrate
und wenn du Heroku verwendestheroku run rake db:migrate
quelle
Scheint der beste Weg zu sein, einer vorhandenen Spalte, die noch keine hat, einen Standard hinzuzufügen
null: false
.Andernfalls:
Einige Nachforschungen, die ich dazu angestellt habe:
https://gist.github.com/Dorian/417b9a0e1a4e09a558c39345d50c8c3b
quelle
Wenn Sie keine weitere Migrationsdatei für eine kleine, kürzlich vorgenommene Änderung erstellen möchten - über die Rails-Konsole:
Beenden Sie dann die Rails-Konsole und geben Sie sie erneut ein, damit die DB-Änderungen wirksam werden. Dann, wenn Sie dies tun ...
Sie sollten den Standardwert "show_attribute" als true sehen.
Wenn Sie für vorhandene Datensätze vorhandene "falsche" Einstellungen beibehalten und nur "Null" -Werte auf Ihren neuen Standardwert aktualisieren möchten:
Aktualisieren Sie die Migration, mit der diese Tabelle erstellt wurde, damit zukünftige Builds der Datenbank sie von Anfang an erhalten. Führen Sie denselben Prozess auch auf allen bereitgestellten Instanzen der Datenbank aus.
Wenn Sie die Methode "Neue Datenbankmigration" verwenden, können Sie vorhandene Nullwerte in dieser Migration aktualisieren.
quelle