2009-07-31 13 views
1

Ich versuche, einige Rake Fixtures (Rake db: Fixtures: laden) in eine MySql-Datenbank zu laden, und ich sehe ein seltsames Verhalten mit AutoIncrement-Werten. Normalerweise erhöht sich das für jede Einfügung um 1, wodurch ich Tests definieren/erstellen kann. (BTW - normal create/insert from script funktioniert korrekt).Rails Rake MySql Autoincrement Problem w db: Fixtures: load

Allerdings, wenn ich von Fixtures laden das ID-Feld ist eine große Zufallszahl zugewiesen und der autoinc Wert auf der Tabelle ist auch eine große Zahl (1054583385) nach dem Laden. Hat jemand anderes das gesehen?

FWIW das ist auf Windows XP mit MySql 5.0 (Ich habe auch mit MySql 5.1 getestet, das Problem gefunden und auf 5.0 zurückgesetzt).

Jeder sonst hat dies gesehen - Ist das ein bekannter Fehler/Problem?

TIA,

Antwort

1

Dies ist kein ungewöhnliches Verhalten für Schienenbefestigungen. Es ist von Grund auf ein zufälliger Hash basierend auf dem Label Ihres Fixtures. Siehe die documentation.

Sie können bei Bedarf in Ihren Fixtures explizit eine ID angeben.

id: 1 

Aber ist es wirklich wichtig? Fixtures sollen für Tests verwendet werden. Die ID Ihrer Objekte ist irrelevant, solange die Relationen vorhanden sind.

Hier ist die entsprechende Funktion aus der Fixtures Klasse:

# Returns a consistent identifier for +label+. This will always 
# be a positive integer, and will always be the same for a given 
# label, assuming the same OS, platform, and version of Ruby. 
def self.identify(label) 
    label.to_s.hash.abs 
end 
+0

Thx für die Info - ich lerne immer noch. Da ich versuche, Eltern-/Kind-/Enkeldatenbeziehungen für meinen Test zu definieren/zu erstellen, spielt es in diesem Fall eine Rolle. Vielleicht gibt es eine bessere (mehr Rails-ish) Möglichkeit, dies zu tun - aber ich muss Daten mit bestimmten Beziehungen erstellen (ich teste einige Bericht Drill-Down-Abfragen). Daher wollte ich die fk-Werte im Voraus vorhersagen können. – BrendanC

+0

Wenn Ihre Beziehungen korrekt definiert sind, müssen Sie sich keine Gedanken über die Fremdschlüsselwerte machen. Verwenden Sie die von ActiveRecord bereitgestellten Tools. – hobodave