diff --git a/app/logical/concerns/searchable.rb b/app/logical/concerns/searchable.rb index 151ad5f86..3cde3b5ec 100644 --- a/app/logical/concerns/searchable.rb +++ b/app/logical/concerns/searchable.rb @@ -10,12 +10,13 @@ module Searchable 1 + params.values.map { |v| parameter_hash?(v) ? parameter_depth(v) : 1 }.max end - def negate(kind = :nand) - unscoped.where(all.where_clause.invert(kind).ast) + def negate_relation + unscoped.where(all.where_clause.invert.ast) end # XXX hacky method to AND two relations together. - def and(relation) + # XXX Replace with ActiveRecord#and (cf https://github.com/rails/rails/pull/39328) + def and_relation(relation) q = all q = q.where(relation.where_clause.ast) if relation.where_clause.present? q = q.joins(relation.joins_values + q.joins_values) if relation.joins_values.present? diff --git a/app/logical/post_query_builder.rb b/app/logical/post_query_builder.rb index 19c67138e..4046485f1 100644 --- a/app/logical/post_query_builder.rb +++ b/app/logical/post_query_builder.rb @@ -92,8 +92,8 @@ class PostQueryBuilder def metatags_match(metatags, relation) metatags.each do |metatag| clause = metatag_matches(metatag.name, metatag.value, quoted: metatag.quoted) - clause = clause.negate if metatag.negated - relation = relation.and(clause) + clause = clause.negate_relation if metatag.negated + relation = relation.and_relation(clause) end relation