2012-10-06 57 views
1

按本example,下面的方法:保存.csv文件數據庫無法識別to_hash方法

require "csv" 

def import_vault_data(filename)  
    fn = "#{RAILS_ROOT}/public/data/#{filename}" 
    CSV.foreach(fn, :headers => true) do |row| 
     House.create!(row.to_hash)  
    end 
end 

正在產生這樣的錯誤:

undefined method `to_hash' for #<Array:0x104cc07b8> 

任何線索,缺什麼?

我使用的鐵軌2.3.9

+1

to_hash在rails上不工作2.3.9它在rails上工作> 3 –

+0

你使用的是哪個版本的Ruby?我猜測它是1.8。 –

+0

很高興知道。是否有相同的方法或手段來完成軌道2.3.9相同的事情? – iamtoc

回答

2

嘗試一下本作的Ruby 1.8.7

House.create!(row.hash) 
+0

這解決了散列錯誤。輝煌!它有效地創建了一個新的'House'記錄,但所有字段都爲空。我確定csv中的字段與「房屋」數據庫表的名稱相同,順序相同。我猜測我還有其他一些要求。而且,它只創建了一個空字段的記錄。在csv中有50條記錄。 – iamtoc

+0

我在'行'上設置了一個斷點。基於返回的單元格值,它看起來好像不知道第一行是標題名稱。生成csv時是否需要指定特定的字段分隔符?或者也許告訴哈希命令使用第一行作爲標題?如果是的話,我會如何做到這一點。我大聲猜測。 – iamtoc

+0

我試過這個:csv = CSV.parse(fn,:headers => true) csv.each do | row | row = Hash [row] .with_indifferent_access House.create!(Hash [row] .symbolize_keys) end - 它在數據庫中產生了正確數量的記錄,但所有的數據庫字段仍爲空。 – iamtoc

2

你也可以做

House.create!(Hash[row]) 
+0

我也試過這個。像魅力一樣工作!創建數據庫記錄,但所有數據庫字段爲空。 – iamtoc

5

可能有點晚了答案,但你需要:

CSV.foreach(file.path, headers: true) do |row| 

你不能調用to_hash,除非你在哈希中有頭文件

+0

這個答案必須被接受! – d12frosted