class FortyFacets::FacetFilterDefinition::HasManyFilter
Public Instance Methods
build_scope()
click to toggle source
# File lib/forty_facets/filter/facet_filter_definition.rb, line 117 def build_scope return Proc.new { |base| base } if empty? Proc.new do |base| base_table = definition.origin_class.table_name primary_key_column = "#{base_table}.#{definition.origin_class.primary_key}" matches_from_facet = base.joins(definition.joins).where("#{definition.association.klass.table_name}.#{definition.association.klass.primary_key}" => values).select(primary_key_column) base.joins(definition.joins).where(primary_key_column => matches_from_facet) end end
facet()
click to toggle source
# File lib/forty_facets/filter/facet_filter_definition.rb, line 130 def facet base_table = definition.search.root_class.table_name join_name = [definition.association.name.to_s, base_table.to_s].sort.join('_') foreign_id_col = definition.association.name.to_s.singularize + '_id' my_column = join_name + '.' + foreign_id_col counts = without.result(skip_ordering: true) .distinct .joins(definition.joins) .select("#{my_column} as foreign_id, count(#{my_column}) as occurrences") .group(my_column) counts.includes_values = [] entities_by_id = definition.association.klass.unscoped.find(counts.map(&:foreign_id)).group_by(&:id) facet = counts.map do |count| facet_entity = entities_by_id[count.foreign_id].first is_selected = selected.include?(facet_entity) FacetValue.new(facet_entity, count.occurrences, is_selected) end order_facet!(facet) end