Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
thoughtbot, inc.
administrate
Wiki
Field: ScopedHasManyField
"url" did not exist on "main"
Field: ScopedHasManyField
· Changes
Page history
Created Field: ScopedHasManyField (markdown)
authored
Feb 22, 2019
by
Derk-Jan Karrenbeld
Hide whitespace changes
Inline
Side-by-side
Field:-ScopedHasManyField.md
0 → 100644
View page @
e7c06a75
> Based on administrate `0.11.0`
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.
```
ruby
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`
:
```
ruby
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.
\ No newline at end of file