From c7bf31c588cb7cb02d991bd68d38546546b3d486 Mon Sep 17 00:00:00 2001 From: kikito Date: Wed, 18 Nov 2015 17:00:07 +0100 Subject: [PATCH] Make search cache order aware & accept values instead of column names --- app/models/concerns/search_cache.rb | 25 +++++++++++++------------ app/models/proposal.rb | 11 +++++++++-- 2 files changed, 22 insertions(+), 14 deletions(-) diff --git a/app/models/concerns/search_cache.rb b/app/models/concerns/search_cache.rb index 04e3869f8..52134aefd 100644 --- a/app/models/concerns/search_cache.rb +++ b/app/models/concerns/search_cache.rb @@ -7,19 +7,20 @@ module SearchCache def calculate_tsvector ActiveRecord::Base.connection.execute(" - UPDATE proposals SET tsv = (to_tsvector('spanish', #{fields_to_sql})) WHERE id = #{self.id}") + UPDATE proposals SET tsv = (#{searchable_values_sql}) WHERE id = #{self.id}") end - def fields_to_sql - fields.collect { |field| "coalesce(#{field},'')" }.join(" || ' ' || ") + private + + def searchable_values_sql + cx = ActiveRecord::Base.connection + arr = [] + searchable_values.each do |val, weight| + if val.present? + arr << "setweight(to_tsvector('spanish', coalesce(#{cx.quote(val)}, '')), #{cx.quote(weight)})" + end + end + arr.join(" || ") end - def fields - searchable_fields << tags_to_sql - end - - def tags_to_sql - "\'#{tag_list.join(' ')}\'" - end - -end \ No newline at end of file +end diff --git a/app/models/proposal.rb b/app/models/proposal.rb index 21f379309..349dd1451 100644 --- a/app/models/proposal.rb +++ b/app/models/proposal.rb @@ -58,8 +58,15 @@ class Proposal < ActiveRecord::Base order_within_rank: "proposals.created_at DESC" } - def searchable_fields - %w(title question summary description) + def searchable_values + values = { + title => 'A', + question => 'B', + summary => 'C', + description => 'D' + } + tag_list.each{ |tag| values[tag] = 'D' } + values end def description