2010-12-28 8 views
0
zweite Mal geladen werden

Dies ist, wie mein Modell wiePreloading Daten ohne Verein vermasselt, wenn Daten, die das

sieht
User 
belongs_to :computer 

Computer 
has_many :user 

Benutzer erstellt werden, wenn die Leute sich für ein Konto auf der Website registrieren, aber Computer sind vorinstallierte Daten die ich in samen.rb/irgendeiner .rake-Datei erstelle. Alles ist gut und gut, wenn die App zum ersten Mal gestartet wird und die Leute sich registrieren und mit der richtigen Computer-ID verbunden werden. Allerdings nehme ich an einen anderen Computer in die Liste

Computer.destroy_all 
Computer.create({:name => "Akane"}) 
Computer.create({:name => "Yoda"}) 
Computer.create({:name => "Mojito"}) #newly added 

läuft die Rakefile zum zweiten Mal um Willen vermasseln die Verbände weil computer_id in der Benutzertabelle beziehen sich auf die alte ID in Computer-Tabelle hinzugefügt werden soll. Da ich das obige Skript ausgeführt habe, erhöht sich die ID in der Computertabelle ohne Rücksicht auf die Assoziation, die der Benutzer zu ihr hat. Alle Benutzer haben jetzt keine Referenz zurück zu ihrem Computer und alle Computer haben jetzt neue IDs.

Frage: Gibt es einen besseren Weg für mich, Daten vorzuladen, ohne meine Verbindung zu beschädigen? Ich möchte in der Lage sein, neue Computer hinzuzufügen, ohne den Benutzertisch zu zerstören. Das Zerstören der Computer-Tabelle ist in Ordnung und ich baue sie neu auf, aber die alte Verbindung, die die bestehenden Benutzer haben, muss intakt bleiben.

Antwort

0

Haben Sie darüber nachgedacht, die Migration für die Computertabelle einfach herunterzufahren?

lässt genannt db Migration sagen/Migration/1_create_computers.rb

$ rake db:migrate:down version=1 

aus dem Samen des Verfahrens zerstören entfernen. Sie würden immer die Benutzer-Tabelle halten ..., in dem durch die Art und Weise Sie eine Spalte computer_id

und natürlich muss der Verein geht

ComputerClass < ActiveRecord::Base 
     has_many :users #(don't forget the 's') 
    end