我使用以下架构创建了Rails数据库:
ActiveRecord::Schema.define(:version => 20090807141407) do
create_table "trunks", :force => true do |t|
t.integer "npa"
t.integer "nxxFrom"
t.integer "nxxTo"
t.string "trnk"
t.datetime "created_at"
t.datetime "updated_at"
end
end
在我的CSV文件中,我只有前四列(npa,nxxFrom,nxxTo和trnk)。
如何在更新最后两列的同时导入CSV数据?
总是谢谢
答案 0 :(得分:2)
使用作为标准Ruby库一部分的csv模块:
require 'csv'
# row will be an array with the fields in the order they appear in the file
CSV.open('myfile.csv', 'r') do |row|
# assuming the fields in the CSV file are in order npa, nxxFrom, nxxTo, trnk
# create and save a Trunk model for each row
Trunk.create!(:npa => row[0], :nxxFrom => row[1], :nxxTo => row[2], :trnk => row[3])
end
我没有使用fastcsv,但看着它的documentation方法看起来是一样的。
答案 1 :(得分:2)
答案 2 :(得分:1)
最后两列将由ActiveRecord更新。如果它们存在于模式中,则ActiveRecord将在创建对象时为created_at和updated_at添加值。对对象的任何修改都将导致updated_at列自动更新。
因此,从CSV导入时只需映射前4列并保存对象。检索对象时,您将看到其他两个值也已自动设置。