class PgSearch::Configuration::Association

Attributes

columns[R]

Public Class Methods

new(model, name, column_names) click to toggle source
# File lib/pg_search/configuration/association.rb, line 10
def initialize(model, name, column_names)
  @model = model
  @name = name
  @columns = Array(column_names).map do |column_name, weight|
    ForeignColumn.new(column_name, weight, @model, self)
  end
end

Public Instance Methods

join(primary_key) click to toggle source
# File lib/pg_search/configuration/association.rb, line 22
def join(primary_key)
  "LEFT OUTER JOIN (#{relation(primary_key).to_sql}) #{subselect_alias} ON #{subselect_alias}.id = #{primary_key}"
end
subselect_alias() click to toggle source
# File lib/pg_search/configuration/association.rb, line 26
def subselect_alias
  Configuration.alias(table_name, @name, "subselect")
end
table_name() click to toggle source
# File lib/pg_search/configuration/association.rb, line 18
def table_name
  @model.reflect_on_association(@name).table_name
end

Private Instance Methods

relation(primary_key) click to toggle source
# File lib/pg_search/configuration/association.rb, line 52
def relation(primary_key)
  result = @model.unscoped.joins(@name).select("#{primary_key} AS id, #{selects}")
  result = result.group(primary_key) unless singular_association?
  result
end
selects() click to toggle source
# File lib/pg_search/configuration/association.rb, line 32
def selects
  if singular_association?
    selects_for_singular_association
  else
    selects_for_multiple_association
  end
end
selects_for_multiple_association() click to toggle source
# File lib/pg_search/configuration/association.rb, line 46
def selects_for_multiple_association
  columns.map do |column|
    "string_agg(#{column.full_name}::text, ' ') AS #{column.alias}"
  end.join(", ")
end
selects_for_singular_association() click to toggle source
# File lib/pg_search/configuration/association.rb, line 40
def selects_for_singular_association
  columns.map do |column|
    "#{column.full_name}::text AS #{column.alias}"
  end.join(", ")
end
singular_association?() click to toggle source
# File lib/pg_search/configuration/association.rb, line 58
def singular_association?
  %i[has_one belongs_to].include?(@model.reflect_on_association(@name).macro)
end