class Administrate::Field::HasMany

Constants

DEFAULT_LIMIT

Public Class Methods

permitted_attribute(attr, _options = {}) click to toggle source
# File lib/administrate/field/has_many.rb, line 10
def self.permitted_attribute(attr, _options = {})
  # This may seem arbitrary, and improvable by using reflection.
  # Worry not: here we do exactly what Rails does. Regardless of the name
  # of the foreign key, has_many associations use the suffix `_ids`
  # for this.
  #
  # Eg: if the associated table and primary key are `countries.code`,
  # you may expect `country_codes` as attribute here, but it will
  # be `country_ids` instead.
  #
  # See https://github.com/rails/rails/blob/b30a23f53b52e59d31358f7b80385ee5c2ba3afe/activerecord/lib/active_record/associations/builder/collection_association.rb#L48
  { "#{attr.to_s.singularize}_ids".to_sym => [] }
end

Public Instance Methods

associated_collection(order = self.order) click to toggle source
# File lib/administrate/field/has_many.rb, line 24
def associated_collection(order = self.order)
  Administrate::Page::Collection.new(associated_dashboard, order: order)
end
associated_resource_options() click to toggle source
# File lib/administrate/field/has_many.rb, line 32
def associated_resource_options
  candidate_resources.map do |associated_resource|
    [
      display_candidate_resource(associated_resource),
      associated_resource.send(association_primary_key),
    ]
  end
end
attribute_key() click to toggle source
# File lib/administrate/field/has_many.rb, line 28
def attribute_key
  permitted_attribute.keys.first
end
data() click to toggle source
# File lib/administrate/field/has_many.rb, line 74
def data
  @data ||= associated_class.none
end
limit() click to toggle source
# File lib/administrate/field/has_many.rb, line 47
def limit
  options.fetch(:limit, DEFAULT_LIMIT)
end
more_than_limit?() click to toggle source
# File lib/administrate/field/has_many.rb, line 70
def more_than_limit?
  paginate? && data.count(:all) > limit
end
order() click to toggle source
# File lib/administrate/field/has_many.rb, line 85
def order
  @order ||= Administrate::Order.new(sort_by, direction)
end
order_from_params(params) click to toggle source
# File lib/administrate/field/has_many.rb, line 78
def order_from_params(params)
  Administrate::Order.new(
    params.fetch(:order, sort_by),
    params.fetch(:direction, direction),
  )
end
paginate?() click to toggle source
# File lib/administrate/field/has_many.rb, line 51
def paginate?
  limit.respond_to?(:positive?) ? limit.positive? : limit.present?
end
permitted_attribute() click to toggle source
# File lib/administrate/field/has_many.rb, line 55
def permitted_attribute
  self.class.permitted_attribute(
    attribute,
    resource_class: resource.class,
  )
end
resources(page = 1, order = self.order) click to toggle source
# File lib/administrate/field/has_many.rb, line 62
def resources(page = 1, order = self.order)
  resources = order.apply(data)
  if paginate?
    resources = resources.page(page).per(limit)
  end
  includes.any? ? resources.includes(*includes) : resources
end
selected_options() click to toggle source
# File lib/administrate/field/has_many.rb, line 41
def selected_options
  return if data.empty?

  data.map { |object| object.send(association_primary_key) }
end

Private Instance Methods

candidate_resources() click to toggle source
# File lib/administrate/field/has_many.rb, line 95
def candidate_resources
  if options.key?(:includes)
    includes = options.fetch(:includes)
    associated_class.includes(*includes).all
  else
    associated_class.all
  end
end
direction() click to toggle source
# File lib/administrate/field/has_many.rb, line 112
def direction
  options[:direction]
end
display_candidate_resource(resource) click to toggle source
# File lib/administrate/field/has_many.rb, line 104
def display_candidate_resource(resource)
  associated_dashboard.display_resource(resource)
end
includes() click to toggle source
# File lib/administrate/field/has_many.rb, line 91
def includes
  associated_dashboard.collection_includes
end
sort_by() click to toggle source
# File lib/administrate/field/has_many.rb, line 108
def sort_by
  options[:sort_by]
end