我有一个大型的.csv文件,其中包括以下标题行:
:headers =>
["_id_", "name", "ascii_names", "alternate_name", "latitute",
"longitude", "feature_class", "feature_code", "country_code", "cc2",
"admin_code_1", "admin_code_2", "admin_code_3", "admin_code_4", "population",
"elevation", "dem", "timezone", "modification_date"]}
我有一个只包含name, country_code, timezone
列的表。
我想仅将.csv文件中这三列插入到表中。
我尝试过以下方法:
CSV.foreach(csv_file, {:col_sep => "\t", :quote_char => '&', :write_headers => true, :headers => ["_id_", "name", "ascii_names", "alternate_name", "latitute", "longitude", "feature_class", "feature_code", "country_code", "cc2", "admin_code_1", "admin_code_2", "admin_code_3", "admin_code_4", "population", "elevation", "dem", "timezone", "modification_date"]}
) do |row|
City.create row.to_hash.values_at(:name, :timezone, :country_code)
binding.pry
end
问题在于,运行后检查表时,没有任何值被填充。行本身已经创建,但它们都是空的。
如何正确映射这些内容,让
.create()
知道哪些列与表相匹配?