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