Hallo Ich habe eine Seeds-Datei in meiner Rails-App, wo ich alle alten Objekte zu starten, und starten Sie dann eine Auswahl an neuen Objekten. Ich würde erwarten, dass die neuen Objekte mit einer ID von 1 erstellt werden, da alle alten Objekte zerstört wurden, aber neue Objekte mit Ids erstellt werden, die höher sind als alle Ids der alten Objekte. Also für ein Beispiel hatte ich 50 Post Objekte alle mit einer ID von 1-50. Ich habe Post.destroy_all ausgeführt und 50 weitere Post-Objekte erstellt. Alle alten Post-Objekte werden zerstört, aber die neuen Post-Objekte haben alle eine ID von 51-100. Post.find (1) existiert nicht.Nachdem alle Datensätze zerstört wurden, warum werden neue Objekte mit einer ID erstellt, die höher ist als die ID des alten letzten Datensatzes?
Hier ist meine Samen-Datei:
Photo.destroy_all
Post.destroy_all
Like.destroy_all
50.times do
Photo.create(name: Faker::Name.name)
end
50.times do
Post.create(body: Faker::Lorem.paragraph)
end
def get_parent
resource = [Post, Photo].sample
parent = resource.all.sample
parent
end
150.times do
parent = get_parent
Like.create(likeable_type: parent.class.name, likeable_id: parent.id)
end
Wenn ich rake db laufe: Samt mehrere Male die Ide jede Sammlung von Objekten erhalten 50 höher jeden Lauf. Also, wenn die IDs sind 101 - 150 und ich rake db: seed und die IDs sind jetzt 151-200 mit keine Objekte mit einer ID kleiner als 151.
Wie erstelle ich Objekte mit IDs beginnend bei 1 nach allem Aufzeichnungen wurden zerstört, und warum bekomme ich dieses aktuelle Verhalten?
Danke für die Hilfe.
Wenn Sie einen Neuanfang wünschen, machen Sie einen TRUNCATE auf dem Tisch. Das bloße Löschen von Datensätzen führt nicht zur Wiederverwendung von IDs in relationalen Datenbanken. – ceejayoz
Eine andere Alternative, wenn du deine Dev-Datenbank als wegwerfend behandelst, wie ich, ist es, sie fallen zu lassen und neu zu erstellen. – max