Ruby on rails rake db:种子设定时填充密钥

Ruby on rails rake db:种子设定时填充密钥,ruby-on-rails,seed,Ruby On Rails,Seed,我有一个txt文件中的状态数据,我用它作为我的状态数据库的种子,该数据库有:id和:name列。名称是州的两位数代码。在seeds.rb文件中使用了以下代码: 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

我有一个txt文件中的状态数据,我用它作为我的状态数据库的种子,该数据库有:id和:name列。名称是州的两位数代码。在seeds.rb文件中使用了以下代码:

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文件,其中包含城市、州的数据。My cities db有以下列:id、:name、:state\u id.:state\u id是states表中的外键。在城市种子数据上运行rake db:seed时,我需要向seeds.rb文件的以下部分添加什么代码来填充:state_id(“代码”是两位数的state id)


使用动态查找器获取状态:

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

这很有效!您介绍的第二个选项速度更快。多谢。
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