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