2012-04-01 8 views
1

私は、私のステートデータを、私のステートdbにカラム:idと:nameを持つシードに使用したtxtファイルに入れました。 :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 

私は現在、city、stateのデータを持つCities.txtファイルを持っています。私の都市dbには、id、:name、:state_idという列があります。 :state_idは、状態テーブルからの外部キーです。 rake db:seedを都市シードデータ(「コード」は2桁の状態ID)で実行しているときに、state_idにデータを設定するために、seeds.rbファイルの下の部分に追加するコードは何ですか?

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

これは素晴らしい!あなたが提示した2番目の選択肢はより速かった。どうもありがとう。 – user1241965

関連する問題