rake db:当种子填充种子填充键
问题描述:
我有一个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
答
使用动态取景器来获取状态:
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
这工作得很好!你提出的第二个选项更快。非常感谢。 – user1241965 2012-04-01 15:22:59