You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Allow custom ImportResult subclass via :result_class option
Adds a :result_class option to active_admin_import so users can plug in
their own ImportResult subclass to collect adapter-specific data (like
inserted ids) without forcing the gem to take on cross-adapter quirks.
The DSL action block now receives result, options via instance_exec
(matching DEFAULT_RESULT_PROC's signature) so the captured data is
actually reachable from user code. Existing zero-arity blocks are
unaffected since Ruby blocks ignore extra arguments.
A PG-only spec demonstrates the canonical PR #191 use case (capturing
result.ids), which is reliable on PostgreSQL via RETURNING but not on
MySQL/SQLite without extra setup.
Copy file name to clipboardExpand all lines: README.md
+32Lines changed: 32 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -68,6 +68,7 @@ Tool | Description
68
68
:timestamps |bool, tells activerecord-import to not add timestamps (if false) even if record timestamps is disabled in ActiveRecord::Base
69
69
:template |custom template rendering
70
70
:template_object |object passing to view
71
+
:result_class |custom `ImportResult` subclass to collect data from each batch (e.g. inserted ids). Must respond to `add(batch_result, qty)` plus the readers used in flash messages (`failed`, `total`, `imported_qty`, `imported?`, `failed?`, `empty?`, `failed_message`).
71
72
:resource_class |resource class name
72
73
:resource_label |resource label value
73
74
:plural_resource_label |pluralized resource label value (default config.plural_resource_label)
@@ -77,6 +78,37 @@ Tool | Description
77
78
78
79
79
80
81
+
#### Custom ImportResult
82
+
83
+
To collect extra data from each batch (for example the ids of inserted rows so you can enqueue background jobs against them), pass a subclass of `ActiveAdminImport::ImportResult` via `:result_class`:
The action block is invoked via `instance_exec` with `result` and `options` as block arguments, so you can either capture them with `do |result, options|` or read them as locals when no arguments are declared.
109
+
110
+
Note: which batch-result attributes are populated depends on the database adapter and the import options. `activerecord-import` returns ids reliably on PostgreSQL; on MySQL/SQLite the behavior depends on the adapter and options like `on_duplicate_key_update`. Putting the collection logic in your own subclass keeps these adapter quirks in your application code.
111
+
80
112
#### Wiki
81
113
82
114
[Check various examples](https://github.com/activeadmin-plugins/active_admin_import/wiki)
0 commit comments