【发布时间】:2018-05-02 10:55:17
【问题描述】:
我正在使用需要 Ruby 的 CSV 类来导入属性数据行的 rake 任务,并且希望在将这些数据插入数据库之前对其进行操作。
CSV
PID,City,Address,Sold Date,Sold Price
100-200-300,Vancouver,510 1700 Nelson Street,01/01/2017,"$500,000 "
200-300-400,Vancouver,304 68 Smithe Street,02/02/2017,"600,000"
驻地表(为简洁起见缩短)
+-----+------+------+---------------+-------------+
| pid | city | unit | street_number | street_name |
+-----+------+------+---------------+-------------+
| | | | | |
+-----+------+------+---------------+-------------+
Rake 任务(目前为止)
require 'csv'
desc 'Upload CSV data into database'
task residences: :environment do
residences = Array.new
counter = 0
csv_file = "#{Rails.root}/public/spreadsheets/unformatted-addresses.csv"
CSV.foreach(csv_file, headers: true, header_converters: :symbol, converters: :all, skip_blanks: true, encoding: 'UTF-8') do |row|
#is this the right place to create the hash?
residences << row.to_hash
#is this the right way to format each cell?
residences[counter][:pid]
residences[counter][:city].downcase
residences[counter][:address].downcase.split(" ")
residences[counter][:sold_date]
residences[counter][:sold_price].delete('$ ,').to_i
Residence.create( #what to put here? )
counter += 1
end
puts "Imported #{counter} rows."
end
我想要实现的是单独格式化单元格内容然后插入到适当的列中,例如地址格式应该是:
“单位”、“街道编号”、“街道名称”
非常感谢您对此的任何帮助!
【问题讨论】:
-
我知道您想要实现什么,但是您的具体问题/问题是什么?我什至不知道您打算为此使用什么模型
-
假设 Residence 模型具有您描述的字段,您可以执行类似 Residence.create(:unit => unit, :street_number => street_number, :street_name => street_name) 的操作,替换单元, street_name, street_number 与您的实际数据
-
谢谢 Anton 和 Pierre,我已经更新了这个问题,希望能更加明确。该语言相对较新,因此请原谅含糊不清,但主要寻找正确的顺序:遍历行 > 格式化单元格 > 将地址拆分为多个部分 > 将记录插入数据库。
-
提示:不要使用
Array.new,只需使用[ ]。长格式版本适用于需要将参数传递给new的特殊情况。
标签: ruby-on-rails ruby database csv