Class: PgSearch::Configuration::Association
- Inherits:
-
Object
- Object
- PgSearch::Configuration::Association
- Defined in:
- lib/pg_search/configuration/association.rb
Instance Attribute Summary collapse
-
#columns ⇒ Object
readonly
Returns the value of attribute columns.
Instance Method Summary collapse
-
#initialize(model, name, column_names) ⇒ Association
constructor
A new instance of Association.
- #join(primary_key) ⇒ Object
- #subselect_alias ⇒ Object
- #table_name ⇒ Object
Constructor Details
#initialize(model, name, column_names) ⇒ Association
8 9 10 11 12 13 14 |
# File 'lib/pg_search/configuration/association.rb', line 8 def initialize(model, name, column_names) @model = model @name = name @columns = Array(column_names).map do |column_name, weight| Column.new(column_name, weight, @model, self) end end |
Instance Attribute Details
#columns ⇒ Object (readonly)
Returns the value of attribute columns.
6 7 8 |
# File 'lib/pg_search/configuration/association.rb', line 6 def columns @columns end |
Instance Method Details
#join(primary_key) ⇒ Object
20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/pg_search/configuration/association.rb', line 20 def join(primary_key) selects = columns.map do |column| case @model.connection.send(:postgresql_version) when 0..90000 "array_to_string(array_agg(#{column.full_name}), ' ') AS #{column.alias}" else "string_agg(#{column.full_name}, ' ') AS #{column.alias}" end end.join(", ") relation = @model.joins(@name).select("#{primary_key} AS id, #{selects}").group(primary_key) "LEFT OUTER JOIN (#{relation.to_sql}) #{subselect_alias} ON #{subselect_alias}.id = #{primary_key}" end |
#subselect_alias ⇒ Object
33 34 35 |
# File 'lib/pg_search/configuration/association.rb', line 33 def subselect_alias Configuration.alias(table_name, @name, "subselect") end |
#table_name ⇒ Object
16 17 18 |
# File 'lib/pg_search/configuration/association.rb', line 16 def table_name @model.reflect_on_association(@name).table_name end |