2016-05-30 8 views
1

Wie wird eine Spalte durch Schienenmigration hinzugefügt, die mehrere Zustände hat? Ich weiß, dass Boolean zwei Zustände haben kann. Aber was, wenn ich mehr als 2 Staaten möchte?Spalte mit mehreren Status hinzufügen

Was sollte ich in den folgenden Befehl aufnehmen, wenn ich möchte, dass die Spalte 4 Zustände hat? Diese vier Staaten würden „groß“ genannt, „mittel“, „klein“, „extra_small“ ...

rails generate migration add_column_to_users 

Antwort

1

Wenn Sie einen bestimmten Satz von Werten speichern müssen, könnten Sie von Enumeratoren interessiert sein.

Enumeratoren in Rails

Die erste Lösung mit ActiveRecord::Enum ist (siehe doc)

Beispiel:

class Conversation < ActiveRecord::Base 
    enum status: [ :active, :archived ] 
end 

Der Nachteil dieser Lösung ist, dass Sie eine wirklich speichern int oder string Geben Sie die Datenbank ein, damit die Einschränkung nicht wirklich erzwungen wird.

Datenbank enumerator

Die zweite Möglichkeit ist eine native Enum-Typ zu verwenden, sollte Ihr RDBMS unterstützt wird.

Beispiel:

CREATE TABLE shirts (
    name VARCHAR(40), 
    size ENUM('x-small', 'small', 'medium', 'large', 'x-large') 
); 

Mit dieser Lösung ist jedoch die Einschränkung erzwungen, aber wenn Sie einen neuen Wert in Ihrem Set benötigen, müssen Sie eine Datenbankmigration.

Dokumentationen:

1

Wenn Sie keine zwingenden Leistungsprobleme haben eine einfache VARCHAR (:string Typ) Spalte ist in der Regel in Ordnung.

Speichern Sie Ihre gültigen Zustände in einem Array, und Sie können Validierungen für Ihr Modell einrichten, um sicherzustellen, dass der Lieferstatus korrekt ist.