-
-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Field: ScopedHasManyField
Derk-Jan Karrenbeld edited this page Mar 15, 2019
·
2 revisions
Based on administrate
0.11.0
Alternatively you can use the gem administrate-field-scoped_has_many
.
The BelongsTo
field has an option scope
, but the HasMany
always calls associated_class.all
. This is an extension field to provide this functionality to HasMany
associations.
require "administrate/field/has_many"
class ScopedHasManyField < Administrate::Field::HasMany
protected
def self.field_type
superclass.field_type
end
private
def candidate_resources
scope = options[:scope] ? options[:scope].call(self) : associated_class.all
scope = scope.includes(*options.fetch(:includes)) if options.key?(:includes)
order = options.delete(:order)
order ? scope.reorder(order) : scope
end
end
You can now use this in ATTRIBUTE_TYPES
:
class FooDashboard < Administrate::BaseDashboard
ATTRIBUTE_TYPES = {
bar: ScopedHasManyField.with_options(scope: -> (field) { OtherModel.where(foo: field.resource) }),
}
Now your has_many
candidates is limited to the current foo
instance.