Ich bin auf der Suche nach einer Möglichkeit, eine Spalte zu erstellen, die automatisch inkrementiert, so wie es die automatische :id-Spalte tut. Wahrscheinlich könnte ich das irgendwie im Modell handhaben, aber das scheint mir etwas umständlich. Ich habe nichts in Rails 3 gefunden, das dies handhabt; gibt es Edelsteine, die dies handhaben könnten? Ich bin überrascht, es ist nicht bereits eine Option, da Rails dieses Verhalten für Primärschlüssel Spalten behandelt.
Antworten
Zu viele Anzeigen?Normalerweise werden automatisch inkrementierende Spalten mit Hilfe von Datenbanksequenzen implementiert. Der Vorteil der Verwendung einer Sequenz gegenüber der Berechnung des nächsten Inkrements ist, dass der nächste Wert aus einer Sequenz atomar ist. Wenn Sie also mehrere Prozesse haben, die neue Elemente erstellen, stellt die Sequenz sicher, dass Ihre Zahlen wirklich eindeutig sind.
Sequenzen können in postgresql, oracle, mysql, ... verwendet werden.
Wie ist dies zu implementieren, wenn Sie z. B. Postgres verwenden?
-
den nächsten Wert aus der Folge auswählen:
Integer(Operator.connection.select_value("SELECT nextval('#{sequence_name}')"))
-
eine Sequenz erstellen:
Operator.connection.execute("CREATE sequence #{sequence_name}")
-
den Startwert einer Sequenz setzen:
Operator.connection.execute("SELECT setval('#{sequence_name}', #{new_start_serial})")
Ich hoffe, das hilft.