я хочу загружать CSV файлы через панель activeadmin.
на индексной странице из ресурса "продукт" я хочу кнопку рядом с кнопкой "новый продукт" с "импортировать csv файл".
не знаю с чего начать. в документации есть что-то про collection_action, но с кодом ниже у меня нет ссылки вверху.
ActiveAdmin.register Post do
collection_action :import_csv, :method => :post do
# Do some CSV importing work here...
redirect_to :action => :index, :notice => "CSV imported successfully!"
end
end
кто-нибудь здесь использует activeadmin и может импортировать данные csv?
Некоторые решения выше обработанного вполне прилично. Я столкнулся с проблемами на практике, что я решил ниже. Решенные проблемы:
Примечание: Я вынул идентификационный фильтр, таким образом, я мог изменить идентификаторы для того, что я продолжаю работать, но большинство вариантов использования, вероятно, хочет удержать его.
require 'csv'
class CsvDb
class << self
def convert_save(model_name, csv_data)
csv_file = csv_data.read
csv_file.to_s.force_encoding("UTF-8")
csv_file.sub!("\xEF\xBB\xBF", '')
target_model = model_name.classify.constantize
headers = csv_file.split("\n")[0].split(",")
CSV.parse(csv_file, headers: true) do |row|
new_object = target_model.new
column_iterator = -1
headers.each do |key|
column_iterator += 1
value = row[column_iterator]
new_object.send "#{key.chomp}=", value
end
new_object.save
end
ActiveRecord::Base.connection.reset_pk_sequence!(model_name.pluralize)
end
end
end