Import CSV Data in a Rails App with ActiveAdmin

я хочу загружать 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?

25
задан user993460 13 October 2011 в 13:32
поделиться

1 ответ

Некоторые решения выше обработанного вполне прилично. Я столкнулся с проблемами на практике, что я решил ниже. Решенные проблемы:

  1. данные CSV Импорта со столбцами в различных заказах
  2. Предотвращение ошибок, вызванных скрытыми символами в Excel CSVs
  3. , Сбрасывающем базу данных primary_key так, чтобы приложение могло продолжить добавлять записи после импорта

Примечание: Я вынул идентификационный фильтр, таким образом, я мог изменить идентификаторы для того, что я продолжаю работать, но большинство вариантов использования, вероятно, хочет удержать его.

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
0
ответ дан 28 November 2019 в 18:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: