Add translations to debate pg_search_scope

Some Debate attributes are now translatable so we need to include all
existing translations on pg_search scope.
This commit is contained in:
Senén Rodero Rodríguez
2019-01-12 16:28:48 +01:00
committed by voodoorai2000
parent 6a6080e6b7
commit 036a3d7636
2 changed files with 38 additions and 5 deletions

View File

@@ -65,13 +65,17 @@ class Debate < ApplicationRecord
.where("author_id != ?", user.id)
end
def searchable_translations_definitions
{ title => "A",
description => "D" }
end
def searchable_values
{ title => "A",
{
author.username => "B",
tag_list.join(" ") => "B",
geozone.try(:name) => "B",
description => "D"
}
}.merge!(searchable_globalized_values)
end
def self.search(terms)
@@ -161,4 +165,16 @@ class Debate < ApplicationRecord
orders << "recommendations" if Setting["feature.user.recommendations_on_debates"] && user&.recommended_debates
return orders
end
private
def searchable_globalized_values
values = {}
translations.each do |translation|
Globalize.with_locale(translation.locale) do
values.merge! searchable_translations_definitions
end
end
values
end
end

View File

@@ -465,18 +465,35 @@ describe Debate do
context "attributes" do
let(:attributes) { { title: "save the world",
description: "in order to save the world one must think about...",
title_es: "para salvar el mundo uno debe pensar en...",
description_es: "uno debe pensar" } }
it "searches by title" do
debate = create(:debate, title: "save the world")
debate = create(:debate, attributes)
results = described_class.search("save the world")
expect(results).to eq([debate])
end
it "searches by title across all languages translations" do
debate = create(:debate, attributes)
results = described_class.search("salvar el mundo")
expect(results).to eq([debate])
end
it "searches by description" do
debate = create(:debate, description: "in order to save the world one must think about...")
debate = create(:debate, attributes)
results = described_class.search("one must think")
expect(results).to eq([debate])
end
it "searches by description across all languages translations" do
debate = create(:debate, attributes)
results = described_class.search("uno debe pensar")
expect(results).to eq([debate])
end
it "searches by author name" do
author = create(:user, username: "Danny Trejo")
debate = create(:debate, author: author)