Field: ScopedHasManyField - thoughtbot/administrate GitHub Wiki
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.