Module: Fields::Serializer::ActionController

Extended by:
ActiveSupport::Concern
Defined in:
lib/fields/serializer/action_controller.rb

Instance Method Summary collapse

Instance Method Details

#render_json_fields(query, optimize_query: true, **options) ⇒ Object

Render the result of an ActiveRecord::Relation query including only the fields specified

Parameters:

  • query (ActiveRecord::Relation)
    • The query to render in json

  • optimize_query (Boolean) (defaults to: true)
    • Add outer joins to the query to prevent a db query per serialized object.

  • options (Hash)

    a customizable set of options

Options Hash (**options):

  • :fields (Array)
    • The list of fields to return in json api syntax

  • :model_class (Class)
    • The model class of the objects to be queried to optimize db hits.

  • :options (Hash)
    • Any other valid option to render method.



15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/fields/serializer/action_controller.rb', line 15

def render_json_fields(query, optimize_query: true, **options)
  fields      = options.delete(:fields)
  model_class = options.delete(:model_class)
  if fields.present?
    if optimize_query
      includes = model_class.fields_to_includes(fields)
      query    = query.includes(*Array.wrap(includes)) if includes
    end
    options.merge!(each_serializer: model_class.fields_serializer(fields), include: "**")
  end
  render options.merge!(json: query.to_a)
end