Module: PgSearch::Multisearch

Defined in:
lib/pg_search/multisearch.rb

Constant Summary collapse

REBUILD_SQL_TEMPLATE =
<<-SQL
INSERT INTO :documents_table (searchable_type, searchable_id, content)
  SELECT :model_name AS searchable_type,
         :model_table.id AS searchable_id,
         (
           :content_expressions
         ) AS content
  FROM :model_table
SQL

Class Method Summary collapse

Class Method Details

.rebuild(model) ⇒ Object



14
15
16
17
18
19
# File 'lib/pg_search/multisearch.rb', line 14

def rebuild(model)
  model.transaction do
    PgSearch::Document.where(:searchable_type => model.name).delete_all
    model.connection.execute(rebuild_sql(model))
  end
end

.rebuild_sql(model) ⇒ Object



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/pg_search/multisearch.rb', line 21

def rebuild_sql(model)
  connection = model.connection

  columns = Array.wrap(
    model.pg_search_multisearchable_options[:against]
  )

  content_expressions = columns.map do |column|
    %Q{coalesce(:model_table.#{column}, '')}
  end.join(" || ' ' || ")

  REBUILD_SQL_TEMPLATE.gsub(
    ":content_expressions", content_expressions
  ).gsub(
    ":model_name", connection.quote(model.name)
  ).gsub(
    ":model_table", model.quoted_table_name
  ).gsub(
    ":documents_table", PgSearch::Document.quoted_table_name
  )
end