Ich habe ein Rails-Modell, das ein nicht standardmäßiges boolesches Feld hat, das nullwertfähig ist und versucht, einen Standardwert festzulegen. Ich habe einen Blogbeitrag über die Vermeidung eines booleschen 3-stat-Problems gefunden und versuche, dies zu berücksichtigen. Dies ist die Migration ich habe:Schienenmigration fügt dem vorhandenen booleschen Feld Standard-NULL-Eigenschaften hinzu
def change
change_column :table, is_foo, :boolean, null: false, default: false
end
die Migration Lauf aufgrund bestehender Nullwerte in der Datenbank fehlschlägt. Was ist der richtige Weg, um bestehende Einträge zu aktualisieren, damit das Schema geändert werden kann? Oder sollte das nicht null Kontrolle zum Modell hinzugefügt werden:
validates :is_foo, presence: true
nicht sicher, ob das Hinzufügen dieser zu der Migration ist die „richtige“ Art und Weise:
Table.update_all(:is_foo => false)
Ähnlich dieser Bereich durch eine Migration hinzugefügt wurde ohne extra not null/default Parameter. Würde die Migration zum Hinzufügen einer Spalte dies ebenfalls erfordern, oder würde der Standardwert den Wert festlegen? Hier ist die Migration Ich lief:
add_column :table, is_foo, :boolean
Wenn ich ,null: false, default: false
auf dem add_column hinzugefügt hätte, hätte alle Werte richtig eingestellt sind?