Я пытаюсь загрузить CSV-файл с помощью Rails из Active Admin.
У меня есть модель User, в которой есть столбцы name
(строка) и age
(целое число).
Мой CSV-файл выглядит следующим образом:
name,age
"Peter",31
"Susan",30
"John",40
Тогда у меня в admin/user.rb
:
ActiveAdmin.register User do
permit_params :name, :age
collection_action :upload_csv do
render "admin/csv/upload_csv_user"
end
collection_action :import_csv_data_user, :method => :post do
ret_val = CsvDb.update_model_from_csv("user", params[:dump][:file])
redirect_to :action => :index, :notice => ret_val
end
end
А в моем admin/csv/upload_csv_user.html.erb
у меня есть:
<%= form_for(:dump, :url=>{:action=>"import_csv_data_user"}, :html => { :multipart => true }) do |f| %>
<%= f.file_field :file %>
<%= f.submit "Submit", confirm: "Are You Sure?" %>
<% end %>
Внутри csv_db.rb
файла, который у меня есть:
require 'csv'
module CsvDb
def self.update_model_from_csv(model_name, file)
csv_data = CSV.read(file.path)
columns = csv_data.shift
model = model_name.classify.constantize
ret_val = "Data updated successfully!"
begin
model.import columns, csv_data, on_duplicate_key_update: columns, validate: false
rescue Exception => e
ret_val = e
end
ret_val
end
end
Когда я пытаюсь загрузить файл, я получаю следующую ошибку: Недопустимое цитирование в строке 1.
И ниже этозаписано:
часть "\" name "
синтаксический анализ" \ "name, age \" "
parts [" \ "name", "age \" "] *
без преобразования nil
in_extended_col false
csv []
Я проверил множество примеров и не могу найти ошибку. Возможно, мой CSV-файл отформатирован неправильно.