Scoping HasMany Relations
To show a subset of a has_many relationship, create a new has_many relationship in your model (using the scope
argument) and add it to the model's dashboard.
Creating a scoped has_many relationship
Models can define subsets of a has_many
relationship by passing a callable (i.e. proc or lambda) as its second argument.
class Customer < ApplicationRecord
has_many :orders
has_many :processed_orders, ->{ where(processed: true) }, class_name: "Order"
Since ActiveRecord infers the class name from the first argument, the new has_many
relation needs to specify the model using the class_name
option.
Add new relationship to dashboard
Your new scoped relation can be used in the dashboard just like the original HasMany
. Notice the new field needs to specifiy the class name as an option like you did in the model.
ATTRIBUTE_TYPES = {
orders: Field::HasMany,
processed_orders: Field::HasMany.with_options(class_name: 'Order')