2012-04-01 69 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