class PgSearch::Configuration::Association
def initialize(model, name, column_names)
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
def join(primary_key)
def join(primary_key) "LEFT OUTER JOIN (#{relation(primary_key).to_sql}) #{subselect_alias} ON #{subselect_alias}.id = #{primary_key}" end
def relation(primary_key)
def relation(primary_key) @model.unscoped.joins(@name).select("#{primary_key} AS id, #{selects}").group(primary_key) end
def selects
def selects postgresql_version = @model.connection.send(:postgresql_version) columns.map do |column| case postgresql_version when 0..90000 "array_to_string(array_agg(#{column.full_name}::text), ' ') AS #{column.alias}" else "string_agg(#{column.full_name}::text, ' ') AS #{column.alias}" end end.join(", ") end
def subselect_alias
def subselect_alias Configuration.alias(table_name, @name, "subselect") end
def table_name
def table_name @model.reflect_on_association(@name).table_name end