2012-04-01 73 views
1

我有一個txt文件中的狀態數據,我用它來種子我的國家數據庫有列:id和:name。 :name是狀態2位數的代碼。在seeds.rb文件中使用以下代碼:rake db:當種子填充種子填充鍵

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 

我現在有了我的Cities.txt文件,其中包含城市,州的數據。我的城市db有列:id,:name,:state_id。 :state_id是來自states表的外鍵。我需要將什麼代碼添加到我的seeds.rb文件的下面部分,以在城市種子數據上運行rake db:seed時填充:state_id(「code」是2位數字的狀態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 

回答

2

使用動態取景器來獲取狀態:

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

或者,如果你想避免一些疑問,如果狀態碼是保證存在,你可以跟蹤當你在一個散列種子他們的國家,並重新使用他們的城市:

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

這工作得很好!你提出的第二個選項更快。非常感謝。 – user1241965 2012-04-01 15:22:59