Zuweisen eines Standardwerts beim Erstellen der Migrationsdatei

104
rails generate migration AddRetweetsCountToTweet retweets_count:integer 

Ok, ich verwende die obige Zeile, um eine Migrationsdatei zu erstellen, die automatisch Code in der generierten Datei generiert, um einem Modell-Tweet eine Spalte mit einer Datentyp-Ganzzahl hinzuzufügen. Jetzt möchte ich der hinzugefügten Spalte beim Generieren der Migrationsdatei einen Standardwert hinzufügen. Ist das möglich? Ich habe es gegoogelt, konnte es aber nicht finden. Jungs brauchen Hilfe.

kxhitiz
quelle
Siehe den RailsGuide zu diesem Thema: guide.rubyonrails.org/migrations.html Die Informationen, die Sie suchen, befinden sich im ersten Abschnitt Anatomie einer Migration
Austin Lin
1
Ich weiß genau was du meinst. Ich habe immer wieder versucht, einen Standardwert festzulegen, und es war eine Art Schmerz, Informationen zu finden. Nur das bloße SQL zu generieren war einfacher, obwohl es dann keine Migration in der Versionskontrolle gibt.
Tass

Antworten:

166

Der Standardmigrationsgenerator verarbeitet keine Standardwerte ( Spaltenmodifikatoren werden unterstützt, enthalten jedoch kein defaultoder null), Sie können jedoch einen eigenen Generator erstellen.

Sie können die Migrationsdatei auch vor dem Ausführen manuell aktualisieren, rake db:migrateindem Sie die folgenden Optionen hinzufügen add_column:

add_column :tweet, :retweets_count, :integer, :null => false, :default => 0

... und lesen Sie die Rails API

Taro
quelle
9
Ok danke für die Antwort. Ich dachte, es wäre großartig, wenn der Standardmigrationsgenerator eine Option zur Verarbeitung von Standardwerten bieten würde, sodass ich die Migrationsdatei nach der Generierung nicht bearbeiten muss, um den Standardwert anzugeben.
Kxhitiz
9

Ja, ich konnte auch nicht sehen, wie 'default' im Migrationsgeneratorbefehl verwendet wird, konnte jedoch einen Standardwert für eine neue Zeichenfolgenspalte wie folgt angeben, indem ich die generierte Migrationsdatei vor dem Anwenden von "rake db: migrate" änderte:

class AddColumnToWidgets < ActiveRecord::Migration
  def change
    add_column :widgets, :colour, :string, default: 'red'
  end
end

Dadurch wird meinem "Widget" -Modell eine neue Spalte mit dem Namen "Farbe" hinzugefügt und die Standardfarbe für neue Widgets auf "Rot" gesetzt.

MSC
quelle
(Dies war in Rails 4.2.)
MSC
4

Ich habe versucht, t.boolean: active ,: default => 1 in der Migrationsdatei zum Erstellen der gesamten Tabelle. Nachdem diese Migration ausgeführt wurde, als ich db eincheckte, wurde sie als null festgelegt. Obwohl ich Standard als "1" sagte. Danach habe ich die Migrationsdatei leicht geändert, dann hat es für mich funktioniert, den Standardwert für die Erstellung einer Tabellenmigrationsdatei festzulegen.

t.boolean: active ,: null => false ,: default => 1. Hat für mich gearbeitet.

Meine Rails-Framework-Version ist 4.0.0

Madhan Ayyasamy
quelle
:default => false?
Christopher Oezbek
2

Sie müssten zuerst Ihre Migration für die Modellgrundlagen erstellen und dann eine weitere Migration erstellen, um Ihre vorherige mithilfe der change_column zu ändern ...

def change
    change_column :widgets, :colour, :string, default: 'red'
end
Artur Pedrosa
quelle