我想将带有标头的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数据库中?
答案 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)
才能获得正确的输出。