search: fix invalid rating searches returning wrong results.

Partial fix for #4389.

* Fix "rating:asdf" returning all posts.
* Fix "rating:s rating:q" returning results for rating:q.
This commit is contained in:
evazion
2020-04-15 00:39:56 -05:00
parent be27423afd
commit 3691404a8d

View File

@@ -445,20 +445,12 @@ class PostQueryBuilder
end
end
if q[:rating] =~ /^q/
relation = relation.where("posts.rating = 'q'")
elsif q[:rating] =~ /^s/
relation = relation.where("posts.rating = 's'")
elsif q[:rating] =~ /^e/
relation = relation.where("posts.rating = 'e'")
q[:rating].to_a.each do |rating|
relation = relation.where(rating: rating.first.downcase)
end
if q[:rating_negated] =~ /^q/
relation = relation.where("posts.rating <> 'q'")
elsif q[:rating_negated] =~ /^s/
relation = relation.where("posts.rating <> 's'")
elsif q[:rating_negated] =~ /^e/
relation = relation.where("posts.rating <> 'e'")
q[:rating_neg].to_a.each do |rating|
relation = relation.where.not(rating: rating.first.downcase)
end
if q[:locked] == "rating"
@@ -839,10 +831,12 @@ class PostQueryBuilder
q[:md5] = g2.downcase.split(/,/)
when "-rating"
q[:rating_negated] = g2.downcase
q[:rating_neg] ||= []
q[:rating_neg] << g2
when "rating"
q[:rating] = g2.downcase
q[:rating] ||= []
q[:rating] << g2
when "-locked"
q[:locked_negated] = g2.downcase