Добавление строк в рельсы из CSV - PullRequest
4 голосов
/ 14 марта 2019

Я хочу импортировать 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 Ответ

3 голосов
/ 14 марта 2019

Одной из проблем с вашим кодом может быть то, что CSV обозначает файл * значений, разделенных запятыми ", но у вас есть точка с запятой. Попробуйте это:

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

Это должно иметь puts(row.to_hash) для правильного вывода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...