2013-02-17 328 views
0

我定義我的哈希和數組是這樣的:插入到數據庫從散列數據和陣列

POPULATION_SUMMARIES = { 
    'ACO' => [ # year , member_count 
     [2013, 523031], 
     [2012, 492349], 
     [2011, 432573] 
    ] 
} 

所以我想插入到表是PopulationSummary。而其行/場都是這樣的:

ACO, 2013, 523031 
    ACO, 2012, 492349 
    ACO, 2011, 432573 
Org_id, year, member_count 

在DB,它實際上是那些「ACO」或其他東西的ID,他們基本上是另一個表的外鍵(即組織表)。

所以我試圖通過這個循環並讀取結構並將其寫入表中。 我去就是這樣的:

POPULATION_SUMMARIES.each do |k, v| 
    org_id = Organization.find_by_name(k).id # so for example ID of ACO 
    v.each do |o| # now read elements of each array 
     # HERE :( QUESTION 
    end 
    end 

所以我有麻煩是怎麼說的好,你從陣列讀取第一個數字,將其插入全年場,第二個數字,你的一部分從表中讀取:插入它MEMBER_COUNT場....

回答

1

這應該讓你關閉:

POPULATION_SUMMARIES.each do |org_name, summaries| 
    org = Organization.find_or_create_by_name(org_name) 

    summaries.each do |year, member_count| 
    PopulationSummary.create({ 
     :organization => org, 
     :year   => year, 
     :member_count => member_count 
    }) 
    end 
end 
+0

嗯?代碼中的第三行是什麼? 「year,member_count = values」它是這樣工作嗎? – Bohn 2013-02-17 23:09:30

+0

是的,這會將右側數組的第一個和第二個值分配給左側的變量。你可以寫'year = values [0]'和'member_count = values [1]',這只是語法糖 – 2013-02-17 23:11:18

+0

請注意,如果沒有給定名稱,'find_or_create_by_name'將創建一個'Organization'對象,所以你將永遠能夠設定關係。 – 2013-02-17 23:13:05