From 4b21b5aac15e8b89b73482871a1b9b88e4b614e7 Mon Sep 17 00:00:00 2001 From: Guo Xiang Tan Date: Tue, 28 Jul 2020 13:23:53 +0800 Subject: [PATCH] FIX: Handle case where `Post#raw` is blank in `Topic.similar_to`. --- app/models/topic.rb | 16 ++++++++++------ spec/models/topic_spec.rb | 4 ++++ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/app/models/topic.rb b/app/models/topic.rb index b6b128a5ab3..caedcd62c30 100644 --- a/app/models/topic.rb +++ b/app/models/topic.rb @@ -581,17 +581,21 @@ class Topic < ActiveRecord::Base return [] if title.blank? raw = raw.presence || "" - title_tsquery = Search.set_tsquery_weight_filter( + tsquery = Search.set_tsquery_weight_filter( Search.prepare_data(title.strip), 'A' ) - raw_tsquery = Search.set_tsquery_weight_filter( - Search.prepare_data(raw[0...MAX_SIMILAR_BODY_LENGTH].strip), - 'B' - ) + if raw.present? + raw_tsquery = Search.set_tsquery_weight_filter( + Search.prepare_data(raw[0...MAX_SIMILAR_BODY_LENGTH].strip), + 'B' + ) - tsquery = Search.to_tsquery(term: "#{title_tsquery} & #{raw_tsquery}", joiner: "|") + tsquery = "#{tsquery} & #{raw_tsquery}" + end + + tsquery = Search.to_tsquery(term: tsquery, joiner: "|") candidates = Topic .visible diff --git a/spec/models/topic_spec.rb b/spec/models/topic_spec.rb index 29af224906e..66faccd4497 100644 --- a/spec/models/topic_spec.rb +++ b/spec/models/topic_spec.rb @@ -531,6 +531,10 @@ describe Topic do expect(Topic.similar_to("has evil trout made any topics?", "i am wondering has evil trout made any topics?")).to eq([topic]) end + it 'returns the similar topic even if raw is blank' do + expect(Topic.similar_to("has evil trout made any topics?", "")).to eq([topic]) + end + it 'matches title against title and raw against raw when searching for topics' do topic.update!(title: '1 2 3 numbered titles') post.update!(raw: 'random toy poodle')