FIX: N+1 query when tagging enabled and no tags in topic list query. Topic query ignored tags input when tagging is disabled.
This commit is contained in:
parent
3d5716a2c8
commit
884779b5c1
|
@ -455,14 +455,18 @@ class TopicQuery
|
||||||
# ALL TAGS: something like this?
|
# ALL TAGS: something like this?
|
||||||
# Topic.joins(:tags).where('tags.name in (?)', @options[:tags]).group('topic_id').having('count(*)=?', @options[:tags].size).select('topic_id')
|
# Topic.joins(:tags).where('tags.name in (?)', @options[:tags]).group('topic_id').having('count(*)=?', @options[:tags].size).select('topic_id')
|
||||||
|
|
||||||
if @options[:tags] && @options[:tags].size > 0
|
if SiteSetting.tagging_enabled
|
||||||
result = result.joins(:tags).preload(:tags)
|
result = result.preload(:tags)
|
||||||
|
|
||||||
# ANY of the given tags:
|
if @options[:tags] && @options[:tags].size > 0
|
||||||
if @options[:tags][0].is_a?(Integer)
|
result = result.joins(:tags)
|
||||||
result = result.where("tags.id in (?)", @options[:tags])
|
|
||||||
else
|
# ANY of the given tags:
|
||||||
result = result.where("tags.name in (?)", @options[:tags])
|
if @options[:tags][0].is_a?(Integer)
|
||||||
|
result = result.where("tags.id in (?)", @options[:tags])
|
||||||
|
else
|
||||||
|
result = result.where("tags.name in (?)", @options[:tags])
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -118,6 +118,10 @@ describe TopicQuery do
|
||||||
let(:tag) { Fabricate(:tag) }
|
let(:tag) { Fabricate(:tag) }
|
||||||
let(:other_tag) { Fabricate(:tag) }
|
let(:other_tag) { Fabricate(:tag) }
|
||||||
|
|
||||||
|
before do
|
||||||
|
SiteSetting.tagging_enabled = true
|
||||||
|
end
|
||||||
|
|
||||||
it "returns topics with the tag when filtered to it" do
|
it "returns topics with the tag when filtered to it" do
|
||||||
tagged_topic1 = Fabricate(:topic, {tags: [tag]})
|
tagged_topic1 = Fabricate(:topic, {tags: [tag]})
|
||||||
tagged_topic2 = Fabricate(:topic, {tags: [other_tag]})
|
tagged_topic2 = Fabricate(:topic, {tags: [other_tag]})
|
||||||
|
|
Loading…
Reference in New Issue