Rails – 在PostgreSQL中将CSV条目导入为数组

我正在使用Ruby on Rails rake任务将.csv文件导入我的PostgreSQL数据库。 我的代码供参考,如下:

require 'csv' namespace :db do desc "Populate database" task populate_database: :environment do CSV.foreach("db.csv", :headers => true) do |row| Sale.create!(row.to_hash) end end end 

在.csv文件中,我有一个格式为“cat; dog; foo; bar”的条目。 现在,这个条目被导入到PostgreSQL中作为“文本”(即数据类型)。 但是,我希望将文本拆分为“;”,并将拆分结果作为文本数组存储在PostgreSQL中。

我该怎么做呢?

编辑澄清:

我的数据看起来像这样:

  column 1 | column 2 | column 3 row 1 John | Jack; Carol | Seth; Annie; Doug row 2 Jim; Cassie; Jane | Anne | Laura; Bob 

现在,当我运行我的rake任务时,“John”作为文本进入PostgreSQL。 “Laura; Bob”也作为文本进入PostgreSQL。 但是,我想要“Laura; Bob”(以及类似地,“Jack; Carol”,“Seth; Annie; Doug”和“Jim; Cassie; Jane”)作为文本数组进入PostgreSQL。 一个这样的arrays看起来像[杰克,卡罗尔]。

试试这个

 csv_file = open("363Live data v0.csv") CSV.parse(csv_file.read, {:headers => true}).each do |row| # row is an array puts row.inspect Sale.create!(row.to_hash) end 

澄清后编辑:

假设 – 您的多个值始终以; 您可能需要检查每个单元格是否有; 然后转换为数组

 # row => {"col1" => "John", "col2" => "Seth; Annie; Doug"} CSV.foreach("363Live data v0.csv", :headers => true) do |row| row.to_hash.map do |key, value| row[key] = value.split(';').map {|v| v.strip} unless value.index(';').nil? end Sale.create!(row) end # row => {"col1"=>"John", "col2"=>["Seth", "Annie", "Doug"]}