ID-Feld ohne Autoinkrement-Option in der Migration

8

Ich habe eine DB-Migration wie folgt:

%Vor%

Jetzt wird der Sitz mit einem Auto-Inkrement erstellt. Das will ich aber nicht. Ich möchte es ohne eine automatische Erhöhung. Ich werde Seat selbst in meiner Logik definieren.

Ich habe mich umgesehen, aber ich kann nicht finden, wie auto_increment zu deaktivieren ist.

Wie mache ich das? Außer für die manuelle Ausführung in MySQL.

    
IceHeat 05.02.2009, 20:55
quelle

4 Antworten

17

Wenn Sie das unbedingt tun müssen (das sollte nicht oft passieren), dann können Sie mit der Rails-Migration DSL einen nicht autoinkrementierenden Primärschlüssel erstellen:

%Vor%

Das wird sowieso für MySQL funktionieren. Wenn Ihre Datenbank eine andere Syntax verwendet, um einen Primärschlüssel anzugeben, ersetzen Sie :options => 'PRIMARY KEY' durch was auch immer das ist.

    
AdminMyServer 08.06.2009 20:51
quelle
2

Diese Frage ist 3 Jahre alt, aber wenn jemand sich 3 Jahre später fragt, wie ich war, machen Sie nur "change_column" für den Fall, dass die Tabelle bereits erstellt wurde:

%Vor%

Dies sollte in Rails 2.x und 3.x funktionieren.

O

    
omarvelous 09.07.2012 16:23
quelle
1

Gibt es einen Grund, warum Sie den ID-Schlüssel von rails nicht verwenden können und manuell einen Index namens Seat hinzufügen?

Ich habe einige Hacks gesehen, nur um Rails zu bekommen, um auf Nicht-Inkrement-PK-Datenbanken zu arbeiten. Ich denke nicht, dass es eine Option ist. Wenn ich mich erinnere, so greift rails auf alle seine Funktionen pro Zeile zu.

Ehrlich gesagt, wie - absolut - brauchen Sie diese leichte Steigerung der Effizienz, die Schienenstruktur zu ignorieren?

Ich denke, die wahre Antwort ist "du kannst nicht". ActiveRecord hat ein paar Dinge, an denen es sich nicht beugt.

    
user54650 05.02.2009 21:16
quelle
0

Ich sage nicht, dass es eine gute Idee ist, aber hier ist, wie ich es für SQLite3 getan habe - ersetzen Sie einfach diesen SQLiteAdapter durch den Adapter Ihrer DB - Sie könnten diese cleaner / short mit einem Aufruf von define_method machen

%Vor%

oder

%Vor%

Natürlich ändern Sie einfach den Adapter für andere db's

    
Leif 16.04.2013 06:23
quelle

Tags und Links