从CSV向Rails添加行

时间:2019-03-14 04:31:53

标签: ruby

我想将带有标头的csv文件导入Rails应用程序。 我的模型中有以下内容:

def self.import(file)
  CSV.foreach(file.path, headers: true) do |row|
    puts(*attribute_names)
    puts(row.to_hash)
    @distrib = Distrib.create! row.to_hash
  end
end

我的控制器:

def import
  Distrib.import(params[:file])
  redirect_to distribs_path, notice: "Contact imported."
end

我的观点:

<%= form_tag({action: :import}, multipart: true)  do %>
    <%= file_field_tag :file %>
    <%= submit_tag "Import" %>
<% end %>

我设法创建了正确数量的记录,但是它们都是空的。

puts(row.to_hash)返回以下内容:

{"email;first_name;last_name;telephone;company;address;city;country;memo"=>"Etienny@yahoo.fr;Etienne;Ton;22142536475;HKM;456 Fifth Avenue;New York;US;Met at Uni"}

如何正确处理这些行以插入到PostgreSQL数据库中?

1 个答案:

答案 0 :(得分:3)

代码中的问题之一可能是CSV代表*(用逗号分隔的值)文件,但是您使用分号分隔符。请尝试以下操作:

CSV.foreach(file.path, {headers: true, col_sep: ";"}) do |row|
   puts(*attribute_names)
   puts(row.to_hash)
   ...
end

这应该有puts(row.to_hash)才能获得正确的输出。