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