diff --git a/app/logical/concerns/searchable.rb b/app/logical/concerns/searchable.rb index eb7c62183..aefeda4ad 100644 --- a/app/logical/concerns/searchable.rb +++ b/app/logical/concerns/searchable.rb @@ -307,6 +307,14 @@ module Searchable relation = relation.where(attr => params[attr]) end + if params[:"#{attr}_present"].present? && params[:"#{attr}_present"].truthy? + relation = relation.where.not(attr => "") + end + + if params[:"#{attr}_present"].present? && params[:"#{attr}_present"].falsy? + relation = relation.where(attr => "") + end + if params[:"#{attr}_eq"].present? relation = relation.where(attr => params[:"#{attr}_eq"]) end diff --git a/test/unit/concerns/searchable.rb b/test/unit/concerns/searchable.rb index aaed24869..0d6fd85a5 100644 --- a/test/unit/concerns/searchable.rb +++ b/test/unit/concerns/searchable.rb @@ -82,6 +82,9 @@ class SearchableTest < ActiveSupport::TestCase assert_search_equals([@p3, @p2], source_not_like: "a*") assert_search_equals([@p3, @p2], source_not_ilike: "A*") assert_search_equals([@p3, @p2], source_not_regex: "^a.*") + + assert_search_equals([], source_present: "false") + assert_search_equals([@p3, @p2, @p1], source_present: "true") end should "support multiple operators on the same attribute" do