3 Stimmen

Rails 3 Migration: Autoincrement auf (Nicht-Primärschlüssel) Spalte?

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.

1voto

nathanvda Punkte 48972

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.

0voto

allesklar Punkte 9238

Wenn Sie wirklich glauben, dass Sie dies benötigen, könnten Sie einen before_create-Filter im Modell erstellen, um den Wert des letzten Datensatzattributs zu überprüfen und 1 hinzuzufügen. Fühlt sich aber hackend an.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X