2012-04-01 4 views
1

Ich habe Statusdaten in einer TXT-Datei, die ich verwendet habe, um meine States db, die Spalten hat: ID und: Name. Der Name ist der zweistellige Statuscode. Verwendete den folgenden Code in samen.rb-Datei:Rake db: Seed Populationsschlüssel beim Seed

State.delete_all 
open("C:/Sites/rails_projects/sales_tracking/lib/assets/states.txt") do |states| 
    states.read.each_line do |state| 
    name = state 
    State.create!(:name => name) 
end 
end 

Ich habe jetzt meine Cities.txt-Datei mit Daten der Stadt, Staat. Meine Städte db hat Spalten: id,: name,: state_id. : state_id ist der Fremdschlüssel aus der states-Tabelle. Welchen Code muss ich zum unten stehenden Teil meiner samen.rb-Datei hinzufügen, um die: state_id während der Ausführung von rake db: seed für die Stadt-Startdaten zu füllen ("code" ist eine 2-stellige Status-ID).

City.delete_all 
open("C:/Sites/rails_projects/sales_tracking/lib/assets/cities.txt") do |cities| 
    cities.read.each_line do |city| 
    name, code = city.chomp.split(",") 
    ?? 
    City.create!(:name => name, :state_id => state_id) 
    end 
end 

Antwort

2

einen dynamischen Finder Verwenden Sie den Zustand zu erhalten:

City.create!(:name => name, :state => State.find_by_name(code)) 

Oder wenn Sie ein paar Abfragen vermeiden möchten, und wenn der Staat Code existieren gewährleistet ist, können Sie verfolgen die Staaten, wie Sie sie in einem Hash-Wert und verwenden Sie sie für die Städte:

State.delete_all 
City.delete_all 

@states = {} 

open("states.txt").read.each_line do |code| 
    @states[code] = State.create!(:name => code) 
end 

open("cities.txt").read.each_line do |city| 
    name, code = city.chomp.split(",") 
    City.create!(:name => name, :state => @states[code]) 
end 
+0

Das hat gut funktioniert! Die zweite Option war schneller. Vielen Dank. – user1241965