Module: Avo::Concerns::AssociationQueryScope

Included in:
BaseController
Defined in:
lib/avo/concerns/association_query_scope.rb

Instance Method Summary collapse

Instance Method Details

#association_query_scope(parent_resource:, parent_record:, association_name:, authorization:, resource:, field_association_name: association_name) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/avo/concerns/association_query_scope.rb', line 4

def association_query_scope(parent_resource:, parent_record:, association_name:, authorization:, resource:, field_association_name: association_name)
  valid_association_name = BaseResource.valid_association_name(parent_record, association_name)
  association_field = find_association_field(resource: parent_resource, association: field_association_name)

  query = authorization.apply_policy(
    parent_record.send(valid_association_name)
  )

  if association_field&.scope.present?
    query = Avo::ExecutionContext.new(
      target: association_field.scope,
      query: query,
      parent: parent_record,
      resource: resource,
      parent_resource: parent_resource
    ).handle
  end

  query
end

#association_summary?Boolean

Returns:

  • (Boolean)


25
26
27
28
29
# File 'lib/avo/concerns/association_query_scope.rb', line 25

def association_summary?
  params[:via_record_id].present? &&
    params[:via_resource_class].present? &&
    (params[:association_name].present? || params[:related_name].present?)
end

#build_association_scope_from_params(resource:, authorization:) ⇒ Object



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/avo/concerns/association_query_scope.rb', line 31

def build_association_scope_from_params(resource:, authorization:)
  parent_resource_class = Avo.resource_manager.get_resource(params[:via_resource_class])
  @parent_record = parent_resource_class.find_record(params[:via_record_id], params: params)
  @parent_resource = parent_resource_class.new(
    record: @parent_record,
    view: Avo::ViewInquirer.new("show")
  )
  @parent_resource.detect_fields

  association_query_scope(
    parent_resource: @parent_resource,
    parent_record: @parent_record,
    association_name: params[:association_name] || params[:related_name],
    authorization: authorization,
    resource: resource
  )
end