Module: ActiveAdminImport::DSL

Defined in:
lib/active_admin_import/dsl.rb

Instance Method Summary collapse

Instance Method Details

#active_admin_import(options = {}) ⇒ Object

Declares import functionality

Options

back

resource action to redirect after processing

col_sep

column separator used for CSV parsing (deprecated)

row_sep

column separator used for CSV parsing (deprecated)

csv_options

hash to override default CSV options

validate

true|false, means perfoem validations or not

batch_size

integer value of max record count inserted by 1 query/transaction

before_import

proc for before import action, hook called with importer object

after_import

proc for after import action, hook called with importer object

before_batch_import

proc for before each batch action, called with importer object

after_batch_import

proc for after each batch action, called with importer object

on_duplicate_key_update

an Array or Hash, tells activerecord-import to use MySQL’s ON DUPLICATE KEY UPDATE ability.

timestamps

true|false, tells activerecord-import to not add timestamps (if false) even if record timestamps is disabled in ActiveRecord::Base

ignore

true|false, tells activerecord-import to use MySQL’s INSERT IGNORE ability

template

custom template rendering

template_object

object passing to view

resource_class

resource class name, override to import to another table (default config.resource_class)

resource_label

resource label value (default config.resource_label)

plural_resource_label

plaralized resource label value (default config.plural_resource_label)



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/active_admin_import/dsl.rb', line 25

def active_admin_import options = {}
  default_options = {
      back: {action: :import},
      csv_options: {},
      template: "admin/import",
      resource_class: config.resource_class,
      resource_label: config.resource_label,
      plural_resource_label: config.plural_resource_label,
      headers_rewrites: {}
  }
  options = default_options.deep_merge(options)
  options[:template_object] = ActiveAdminImport::Model.new if options[:template_object].blank?
  params_key = ActiveModel::Naming.param_key(options[:template_object])

  collection_action :import, method: :get do
    @active_admin_import_model = options[:template_object]
    render template: options[:template]
  end

  action_item only: :index do
    link_to(I18n.t('active_admin_import.import_model', model: options[:resource_label]), action: 'import')
  end

  collection_action :do_import, method: :post do

    @active_admin_import_model = options[:template_object]
    @active_admin_import_model.assign_attributes(params[params_key].try(:deep_symbolize_keys) || {})
    #go back to form
    return render template: options[:template] unless @active_admin_import_model.valid?

    importer = Importer.new(options[:resource_class],
                            @active_admin_import_model,
                            options
    )
    begin
      result = importer.import
      model_name = options[:resource_label].downcase
      plural_model_name = options[:resource_label].downcase
      flash[:notice] = I18n.t('active_admin_import.imported',
                              count: result[:imported].to_i,
                              model: model_name,
                              plural_model: plural_model_name
      ) if result[:imported].to_i > 0

      flash[:error] = I18n.t('active_admin_import.failed',
                             count: result[:failed].count,
                             model: model_name,
                             plural_model: plural_model_name
      ) if  result[:failed].count > 0
    rescue ActiveRecord::Import::MissingColumnError => e
       flash[:error] = e.message
    end


    redirect_to options[:back]
  end

end