rails_admin 3.1.1 → 3.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +23 -17
  3. data/README.md +6 -4
  4. data/app/assets/javascripts/rails_admin/application.js.erb +3 -2
  5. data/app/assets/stylesheets/rails_admin/application.scss.erb +1 -1
  6. data/app/controllers/rails_admin/main_controller.rb +16 -1
  7. data/app/helpers/rails_admin/application_helper.rb +4 -0
  8. data/app/helpers/rails_admin/form_builder.rb +6 -5
  9. data/app/helpers/rails_admin/main_helper.rb +1 -1
  10. data/app/views/layouts/rails_admin/_head.html.erb +10 -7
  11. data/app/views/rails_admin/main/_form_boolean.html.erb +2 -2
  12. data/app/views/rails_admin/main/_form_filtering_multiselect.html.erb +5 -35
  13. data/app/views/rails_admin/main/_form_filtering_select.html.erb +6 -18
  14. data/app/views/rails_admin/main/_form_nested_many.html.erb +1 -1
  15. data/app/views/rails_admin/main/_form_nested_one.html.erb +1 -1
  16. data/app/views/rails_admin/main/_form_polymorphic_association.html.erb +12 -21
  17. data/app/views/rails_admin/main/delete.html.erb +1 -1
  18. data/app/views/rails_admin/main/index.html.erb +2 -2
  19. data/config/initializers/active_record_extensions.rb +0 -23
  20. data/lib/generators/rails_admin/importmap_formatter.rb +3 -2
  21. data/lib/generators/rails_admin/install_generator.rb +13 -1
  22. data/lib/generators/rails_admin/templates/rails_admin.vite.js +2 -0
  23. data/lib/rails_admin/abstract_model.rb +18 -7
  24. data/lib/rails_admin/adapters/active_record/association.rb +28 -11
  25. data/lib/rails_admin/adapters/active_record/object_extension.rb +0 -18
  26. data/lib/rails_admin/adapters/active_record.rb +56 -5
  27. data/lib/rails_admin/adapters/mongoid/association.rb +4 -4
  28. data/lib/rails_admin/adapters/mongoid/bson.rb +1 -0
  29. data/lib/rails_admin/adapters/mongoid/object_extension.rb +0 -5
  30. data/lib/rails_admin/adapters/mongoid.rb +13 -3
  31. data/lib/rails_admin/config/actions/export.rb +2 -1
  32. data/lib/rails_admin/config/actions/index.rb +7 -5
  33. data/lib/rails_admin/config/actions/show.rb +1 -1
  34. data/lib/rails_admin/config/configurable.rb +1 -1
  35. data/lib/rails_admin/config/fields/association.rb +41 -2
  36. data/lib/rails_admin/config/fields/base.rb +5 -5
  37. data/lib/rails_admin/config/fields/collection_association.rb +90 -0
  38. data/lib/rails_admin/config/fields/factories/active_storage.rb +2 -2
  39. data/lib/rails_admin/config/fields/factories/carrierwave.rb +1 -1
  40. data/lib/rails_admin/config/fields/factories/dragonfly.rb +1 -1
  41. data/lib/rails_admin/config/fields/factories/paperclip.rb +1 -1
  42. data/lib/rails_admin/config/fields/factories/shrine.rb +1 -1
  43. data/lib/rails_admin/config/fields/singular_association.rb +59 -0
  44. data/lib/rails_admin/config/fields/types/active_storage.rb +12 -7
  45. data/lib/rails_admin/config/fields/types/all.rb +0 -1
  46. data/lib/rails_admin/config/fields/types/belongs_to_association.rb +17 -20
  47. data/lib/rails_admin/config/fields/types/dragonfly.rb +0 -1
  48. data/lib/rails_admin/config/fields/types/file_upload.rb +7 -1
  49. data/lib/rails_admin/config/fields/types/has_and_belongs_to_many_association.rb +2 -2
  50. data/lib/rails_admin/config/fields/types/has_many_association.rb +2 -24
  51. data/lib/rails_admin/config/fields/types/has_one_association.rb +12 -22
  52. data/lib/rails_admin/config/fields/types/multiple_active_storage.rb +13 -8
  53. data/lib/rails_admin/config/fields/types/multiple_file_upload.rb +7 -1
  54. data/lib/rails_admin/config/fields/types/polymorphic_association.rb +32 -9
  55. data/lib/rails_admin/config/model.rb +3 -1
  56. data/lib/rails_admin/config.rb +9 -5
  57. data/lib/rails_admin/engine.rb +5 -0
  58. data/lib/rails_admin/extensions/paper_trail/auditing_adapter.rb +1 -1
  59. data/lib/rails_admin/extensions/pundit/authorization_adapter.rb +2 -1
  60. data/lib/rails_admin/extensions/url_for_extension.rb +15 -0
  61. data/lib/rails_admin/support/composite_keys_serializer.rb +15 -0
  62. data/lib/rails_admin/support/csv_converter.rb +0 -1
  63. data/lib/rails_admin/support/datetime.rb +1 -0
  64. data/lib/rails_admin/support/serialization_schema.rb +72 -0
  65. data/lib/rails_admin/version.rb +1 -1
  66. data/lib/rails_admin.rb +1 -0
  67. data/package.json +2 -2
  68. data/src/rails_admin/abstract-select.js +30 -0
  69. data/src/rails_admin/base.js +4 -1
  70. data/src/rails_admin/filtering-multiselect.js +2 -4
  71. data/src/rails_admin/filtering-select.js +2 -4
  72. data/src/rails_admin/ui.js +7 -1
  73. metadata +41 -18
  74. data/lib/rails_admin/adapters/composite_primary_keys/association.rb +0 -45
  75. data/lib/rails_admin/adapters/composite_primary_keys.rb +0 -40
  76. data/lib/rails_admin/config/fields/types/composite_keys_belongs_to_association.rb +0 -31
@@ -0,0 +1,72 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rails_admin/support/hash_helper'
4
+
5
+ module RailsAdmin
6
+ # The options passed to to_json/to_xml, limited to what a section exposes.
7
+ # It mirrors what the export form offers, as the form is what builds them.
8
+ class SerializationSchema
9
+ def initialize(section, include_associations:)
10
+ @section = section
11
+ @include_associations = include_associations
12
+ end
13
+
14
+ def default
15
+ sanitize(allowed)
16
+ end
17
+
18
+ # Anything not allowed is dropped, and `only` is always set, since leaving
19
+ # it out makes to_json/to_xml serialize every attribute.
20
+ def sanitize(requested)
21
+ requested = HashHelper.symbolize(requested)
22
+ schema = filter(requested, allowed)
23
+ if @include_associations && requested[:include].is_a?(Hash)
24
+ schema[:include] = requested[:include].each_with_object({}) do |(name, value), included|
25
+ next unless value.is_a?(Hash) && allowed[:include].key?(name)
26
+
27
+ included[name] = filter(value, allowed[:include][name])
28
+ end
29
+ end
30
+ schema
31
+ end
32
+
33
+ private
34
+
35
+ def allowed
36
+ @allowed ||= begin
37
+ fields = @section.visible_fields
38
+ names = field_names(fields.select { |f| !f.association? || f.association.polymorphic? })
39
+ if @include_associations
40
+ names[:include] = fields.select { |f| f.association? && !f.association.polymorphic? }.to_h do |field|
41
+ associated = field.associated_model_config.export.with(@section.bindings.merge(object: field.associated_model_config.abstract_model.model.new))
42
+ [field.name, field_names(associated.visible_fields.reject(&:association?))]
43
+ end
44
+ else
45
+ # The list shows these associations already, so their keys expose nothing more
46
+ names[:only].concat(fields.select { |f| f.association? && f.association.type == :belongs_to && !f.association.polymorphic? }.
47
+ flat_map { |f| Array(f.association.foreign_key) })
48
+ end
49
+ names
50
+ end
51
+ end
52
+
53
+ def field_names(fields)
54
+ fields.each_with_object({only: [], methods: []}) do |field, names|
55
+ list = field.virtual? ? names[:methods] : names[:only]
56
+ if field.association?
57
+ list << field.method_name.to_sym << field.association.foreign_type.to_sym
58
+ else
59
+ list << field.name
60
+ end
61
+ end
62
+ end
63
+
64
+ def filter(requested, permitted)
65
+ only = Array(requested[:only]) & permitted[:only]
66
+ # Mongoid serializes every attribute for an empty `only`
67
+ schema = {only: only.presence || [:__none__]}
68
+ schema[:methods] = Array(requested[:methods]) & permitted[:methods] if requested.key?(:methods)
69
+ schema
70
+ end
71
+ end
72
+ end
@@ -3,7 +3,7 @@
3
3
  module RailsAdmin
4
4
  class Version
5
5
  MAJOR = 3
6
- MINOR = 1
6
+ MINOR = 3
7
7
  PATCH = 1
8
8
  PRE = nil
9
9
 
data/lib/rails_admin.rb CHANGED
@@ -10,6 +10,7 @@ require 'rails_admin/extensions/pundit'
10
10
  require 'rails_admin/extensions/paper_trail'
11
11
  require 'rails_admin/support/csv_converter'
12
12
  require 'rails_admin/support/hash_helper'
13
+ require 'rails_admin/support/serialization_schema'
13
14
  require 'yaml'
14
15
 
15
16
  module RailsAdmin
data/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rails_admin",
3
- "version": "3.1.1",
3
+ "version": "3.3.1",
4
4
  "description": "RailsAdmin is a Rails engine that provides an easy-to-use interface for managing your data.",
5
5
  "homepage": "https://github.com/railsadminteam/rails_admin",
6
6
  "license": "MIT",
@@ -22,7 +22,7 @@
22
22
  "bootstrap": "^5.1.3",
23
23
  "flatpickr": "^4.6.9",
24
24
  "jquery": "^3.6.0",
25
- "jquery-ui": "^1.12.1"
25
+ "jquery-ui": "^1.12.1 <1.14.0"
26
26
  },
27
27
  "devDependencies": {
28
28
  "prettier": "^2.4.1"
@@ -0,0 +1,30 @@
1
+ import jQuery from "jquery";
2
+ import "jquery-ui/ui/widget.js";
3
+
4
+ (function ($) {
5
+ "use strict";
6
+
7
+ $.widget("ra.abstractSelect", {
8
+ options: {
9
+ createQuery: function (query) {
10
+ if ($.isEmptyObject(this.scopeBy)) {
11
+ return { query: query };
12
+ } else {
13
+ const filterQuery = {};
14
+ for (var field in this.scopeBy) {
15
+ const targetField = this.scopeBy[field];
16
+ const targetValue = $(`[name$="[${field}]"]`).val();
17
+ if (!filterQuery[targetField]) {
18
+ filterQuery[targetField] = [];
19
+ }
20
+ filterQuery[targetField].push(
21
+ targetValue ? { o: "is", v: targetValue } : { o: "_blank" }
22
+ );
23
+ }
24
+ return { query: query, f: filterQuery };
25
+ }
26
+ },
27
+ scopeBy: {},
28
+ },
29
+ });
30
+ })(jQuery);
@@ -17,6 +17,7 @@ import "jquery-ui/ui/widget.js";
17
17
  import "jquery-ui/ui/widgets/menu.js";
18
18
  import "jquery-ui/ui/widgets/mouse.js";
19
19
 
20
+ import "./abstract-select";
20
21
  import "./filter-box";
21
22
  import "./filtering-multiselect";
22
23
  import "./filtering-select";
@@ -26,4 +27,6 @@ import "./sidescroll";
26
27
  import "./ui";
27
28
  import "./widgets";
28
29
 
29
- Rails.start();
30
+ if (!window._rails_loaded) {
31
+ Rails.start();
32
+ }
@@ -1,13 +1,11 @@
1
1
  import jQuery from "jquery";
2
2
  import "jquery-ui/ui/widget.js";
3
3
  import I18n from "./i18n";
4
+
4
5
  (function ($) {
5
- $.widget("ra.filteringMultiselect", {
6
+ $.widget("ra.filteringMultiselect", $.ra.abstractSelect, {
6
7
  _cache: {},
7
8
  options: {
8
- createQuery: function (query) {
9
- return { query: query };
10
- },
11
9
  sortable: false,
12
10
  removable: true,
13
11
  regional: {
@@ -6,11 +6,8 @@ import I18n from "./i18n";
6
6
  (function ($) {
7
7
  "use strict";
8
8
 
9
- $.widget("ra.filteringSelect", {
9
+ $.widget("ra.filteringSelect", $.ra.abstractSelect, {
10
10
  options: {
11
- createQuery: function (query) {
12
- return { query: query };
13
- },
14
11
  minLength: 0,
15
12
  searchDelay: 200,
16
13
  remote_source: null,
@@ -300,6 +297,7 @@ import I18n from "./i18n";
300
297
  destroy: function () {
301
298
  this.input.remove();
302
299
  this.button.remove();
300
+ this.element.html($('<option value="" selected="selected"></option>'));
303
301
  this.element.show();
304
302
  this.filtering_select.remove();
305
303
  $.Widget.prototype.destroy.call(this);
@@ -88,7 +88,7 @@ import I18n from "./i18n";
88
88
  $(document).ready(triggerDomReady);
89
89
  document.addEventListener("turbo:render", triggerDomReady);
90
90
 
91
- document.addEventListener("rails_admin.dom_ready", function () {
91
+ document.addEventListener("rails_admin.dom_ready", function (event) {
92
92
  $(".nav.nav-pills li.active").removeClass("active");
93
93
  $(
94
94
  '.nav.nav-pills li[data-model="' + $(".page-header").data("model") + '"]'
@@ -129,6 +129,12 @@ import I18n from "./i18n";
129
129
  $("a[data-method]").on("click", function (event) {
130
130
  window.Turbo.session.drive = false;
131
131
  });
132
+
133
+ // Trigger via jQuery for compatibility with existing user codes
134
+ $(document).trigger(
135
+ "rails_admin.dom_ready",
136
+ event.detail ? [event.detail] : null
137
+ );
132
138
  });
133
139
 
134
140
  $(document).on("click", ".bulk-link", function (event) {
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails_admin
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.1
4
+ version: 3.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Erik Michaels-Ober
@@ -9,10 +9,9 @@ authors:
9
9
  - Petteri Kaapa
10
10
  - Benoit Benezech
11
11
  - Mitsuhiro Shibuya
12
- autorequire:
13
12
  bindir: bin
14
13
  cert_chain: []
15
- date: 2022-12-18 00:00:00.000000000 Z
14
+ date: 1980-01-02 00:00:00.000000000 Z
16
15
  dependencies:
17
16
  - !ruby/object:Gem::Dependency
18
17
  name: activemodel-serializers-xml
@@ -28,6 +27,20 @@ dependencies:
28
27
  - - ">="
29
28
  - !ruby/object:Gem::Version
30
29
  version: '1.0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: csv
32
+ requirement: !ruby/object:Gem::Requirement
33
+ requirements:
34
+ - - ">="
35
+ - !ruby/object:Gem::Version
36
+ version: '0'
37
+ type: :runtime
38
+ prerelease: false
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
31
44
  - !ruby/object:Gem::Dependency
32
45
  name: kaminari
33
46
  requirement: !ruby/object:Gem::Requirement
@@ -71,7 +84,7 @@ dependencies:
71
84
  version: '6.0'
72
85
  - - "<"
73
86
  - !ruby/object:Gem::Version
74
- version: '8'
87
+ version: '9'
75
88
  type: :runtime
76
89
  prerelease: false
77
90
  version_requirements: !ruby/object:Gem::Requirement
@@ -81,21 +94,27 @@ dependencies:
81
94
  version: '6.0'
82
95
  - - "<"
83
96
  - !ruby/object:Gem::Version
84
- version: '8'
97
+ version: '9'
85
98
  - !ruby/object:Gem::Dependency
86
99
  name: turbo-rails
87
100
  requirement: !ruby/object:Gem::Requirement
88
101
  requirements:
89
- - - "~>"
102
+ - - ">="
90
103
  - !ruby/object:Gem::Version
91
104
  version: '1.0'
105
+ - - "<"
106
+ - !ruby/object:Gem::Version
107
+ version: '3'
92
108
  type: :runtime
93
109
  prerelease: false
94
110
  version_requirements: !ruby/object:Gem::Requirement
95
111
  requirements:
96
- - - "~>"
112
+ - - ">="
97
113
  - !ruby/object:Gem::Version
98
114
  version: '1.0'
115
+ - - "<"
116
+ - !ruby/object:Gem::Version
117
+ version: '3'
99
118
  - !ruby/object:Gem::Dependency
100
119
  name: bundler
101
120
  requirement: !ruby/object:Gem::Requirement
@@ -190,6 +209,7 @@ files:
190
209
  - lib/generators/rails_admin/templates/initializer.erb
191
210
  - lib/generators/rails_admin/templates/rails_admin.js
192
211
  - lib/generators/rails_admin/templates/rails_admin.scss.erb
212
+ - lib/generators/rails_admin/templates/rails_admin.vite.js
193
213
  - lib/generators/rails_admin/templates/rails_admin.webpacker.js
194
214
  - lib/generators/rails_admin/utils.rb
195
215
  - lib/rails_admin.rb
@@ -198,8 +218,6 @@ files:
198
218
  - lib/rails_admin/adapters/active_record/association.rb
199
219
  - lib/rails_admin/adapters/active_record/object_extension.rb
200
220
  - lib/rails_admin/adapters/active_record/property.rb
201
- - lib/rails_admin/adapters/composite_primary_keys.rb
202
- - lib/rails_admin/adapters/composite_primary_keys/association.rb
203
221
  - lib/rails_admin/adapters/mongoid.rb
204
222
  - lib/rails_admin/adapters/mongoid/association.rb
205
223
  - lib/rails_admin/adapters/mongoid/bson.rb
@@ -225,6 +243,7 @@ files:
225
243
  - lib/rails_admin/config/fields.rb
226
244
  - lib/rails_admin/config/fields/association.rb
227
245
  - lib/rails_admin/config/fields/base.rb
246
+ - lib/rails_admin/config/fields/collection_association.rb
228
247
  - lib/rails_admin/config/fields/factories/action_text.rb
229
248
  - lib/rails_admin/config/fields/factories/active_storage.rb
230
249
  - lib/rails_admin/config/fields/factories/association.rb
@@ -236,6 +255,7 @@ files:
236
255
  - lib/rails_admin/config/fields/factories/password.rb
237
256
  - lib/rails_admin/config/fields/factories/shrine.rb
238
257
  - lib/rails_admin/config/fields/group.rb
258
+ - lib/rails_admin/config/fields/singular_association.rb
239
259
  - lib/rails_admin/config/fields/types.rb
240
260
  - lib/rails_admin/config/fields/types/action_text.rb
241
261
  - lib/rails_admin/config/fields/types/active_record_enum.rb
@@ -249,7 +269,6 @@ files:
249
269
  - lib/rails_admin/config/fields/types/ck_editor.rb
250
270
  - lib/rails_admin/config/fields/types/code_mirror.rb
251
271
  - lib/rails_admin/config/fields/types/color.rb
252
- - lib/rails_admin/config/fields/types/composite_keys_belongs_to_association.rb
253
272
  - lib/rails_admin/config/fields/types/date.rb
254
273
  - lib/rails_admin/config/fields/types/datetime.rb
255
274
  - lib/rails_admin/config/fields/types/decimal.rb
@@ -311,13 +330,17 @@ files:
311
330
  - lib/rails_admin/extensions/paper_trail/auditing_adapter.rb
312
331
  - lib/rails_admin/extensions/pundit.rb
313
332
  - lib/rails_admin/extensions/pundit/authorization_adapter.rb
333
+ - lib/rails_admin/extensions/url_for_extension.rb
334
+ - lib/rails_admin/support/composite_keys_serializer.rb
314
335
  - lib/rails_admin/support/csv_converter.rb
315
336
  - lib/rails_admin/support/datetime.rb
316
337
  - lib/rails_admin/support/es_module_processor.rb
317
338
  - lib/rails_admin/support/hash_helper.rb
339
+ - lib/rails_admin/support/serialization_schema.rb
318
340
  - lib/rails_admin/version.rb
319
341
  - lib/tasks/rails_admin.rake
320
342
  - package.json
343
+ - src/rails_admin/abstract-select.js
321
344
  - src/rails_admin/base.js
322
345
  - src/rails_admin/filter-box.js
323
346
  - src/rails_admin/filtering-multiselect.js
@@ -446,12 +469,13 @@ homepage: https://github.com/railsadminteam/rails_admin
446
469
  licenses:
447
470
  - MIT
448
471
  metadata: {}
449
- post_install_message: "\n ### Upgrading RailsAdmin from 2.x.x to 3.x.x ###\n\n
450
- \ Due to introduction of Webpack/Webpacker support, some additional dependencies
451
- and configuration will be needed.\n Running `bin/rails g rails_admin:install`
452
- will suggest required changes, based on the current setup of your app.\n\n For
453
- a complete list of changes, see https://github.com/railsadminteam/rails_admin/blob/master/CHANGELOG.md\n
454
- \ "
472
+ post_install_message: |
473
+ ### Upgrading RailsAdmin from 2.x.x to 3.x.x ###
474
+
475
+ Due to introduction of Webpack/Webpacker support, some additional dependencies and configuration will be needed.
476
+ Running `bin/rails g rails_admin:install` will suggest required changes, based on the current setup of your app.
477
+
478
+ For a complete list of changes, see https://github.com/railsadminteam/rails_admin/blob/master/CHANGELOG.md
455
479
  rdoc_options: []
456
480
  require_paths:
457
481
  - lib
@@ -466,8 +490,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
466
490
  - !ruby/object:Gem::Version
467
491
  version: 1.8.11
468
492
  requirements: []
469
- rubygems_version: 3.3.7
470
- signing_key:
493
+ rubygems_version: 4.0.19
471
494
  specification_version: 4
472
495
  summary: Admin for Rails
473
496
  test_files: []
@@ -1,45 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RailsAdmin
4
- module Adapters
5
- module CompositePrimaryKeys
6
- class Association < RailsAdmin::Adapters::ActiveRecord::Association
7
- def field_type
8
- if type == :belongs_to && association.foreign_key.is_a?(Array)
9
- :composite_keys_belongs_to_association
10
- else
11
- super
12
- end
13
- end
14
-
15
- def primary_key
16
- return nil if polymorphic?
17
-
18
- value = association.association_primary_key
19
-
20
- if value.is_a? Array
21
- :id
22
- else
23
- value.to_sym
24
- end
25
- end
26
-
27
- def foreign_key
28
- if association.foreign_key.is_a? Array
29
- association.foreign_key.map(&:to_sym)
30
- else
31
- super
32
- end
33
- end
34
-
35
- def key_accessor
36
- if type == :belongs_to && foreign_key.is_a?(Array)
37
- :"#{name}_id"
38
- else
39
- super
40
- end
41
- end
42
- end
43
- end
44
- end
45
- end
@@ -1,40 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_admin/adapters/active_record'
4
- require 'rails_admin/adapters/composite_primary_keys/association'
5
-
6
- module RailsAdmin
7
- module Adapters
8
- module CompositePrimaryKeys
9
- include RailsAdmin::Adapters::ActiveRecord
10
-
11
- def get(id, scope = scoped)
12
- begin
13
- object = scope.find(id)
14
- rescue ::ActiveRecord::RecordNotFound
15
- return nil
16
- end
17
-
18
- object.extend(RailsAdmin::Adapters::ActiveRecord::ObjectExtension)
19
- end
20
-
21
- def associations
22
- model.reflect_on_all_associations.collect do |association|
23
- RailsAdmin::Adapters::CompositePrimaryKeys::Association.new(association, model)
24
- end
25
- end
26
-
27
- private
28
-
29
- def bulk_scope(scope, options)
30
- if primary_key.is_a? Array
31
- options[:bulk_ids].map do |id|
32
- scope.where(primary_key.zip(::CompositePrimaryKeys::CompositeKeys.parse(id)).to_h)
33
- end.reduce(&:or)
34
- else
35
- super
36
- end
37
- end
38
- end
39
- end
40
- end
@@ -1,31 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_admin/config/fields/types/belongs_to_association'
4
-
5
- module RailsAdmin
6
- module Config
7
- module Fields
8
- module Types
9
- class CompositeKeysBelongsToAssociation < RailsAdmin::Config::Fields::Types::BelongsToAssociation
10
- RailsAdmin::Config::Fields::Types.register(self)
11
-
12
- register_instance_option :allowed_methods do
13
- nested_form ? [method_name] : Array(association.foreign_key)
14
- end
15
-
16
- def selected_id
17
- association.foreign_key.map { |attribute| bindings[:object].safe_send(attribute) }.to_composite_keys.to_s
18
- end
19
-
20
- def parse_input(params)
21
- return unless params[method_name].present? && association.foreign_key.is_a?(Array) && !nested_form
22
-
23
- association.foreign_key.zip(CompositePrimaryKeys::CompositeKeys.parse(params.delete(method_name))).each do |key, value|
24
- params[key] = value
25
- end
26
- end
27
- end
28
- end
29
- end
30
- end
31
- end