searchable: fix searching for polymorphic attributes.

Fix not being able to use the full set of search operators on polymorphic `model_id` and
`model_type` attributes. Before things like `search[model_type]=Post` worked, but
`search[model_type_not_eq]=Post` or other `model_type_*` operators didn't.
This commit is contained in:
evazion
2022-09-29 03:23:42 -05:00
parent 09eb763e3c
commit c5b215ffcb
3 changed files with 8 additions and 9 deletions

View File

@@ -648,13 +648,8 @@ module Searchable
relation = visible(relation, attr).where(attr => model.visible(current_user).search(params[model_key], current_user))
end
if params["#{attr}_id"].present?
relation = search_context(relation).search_attribute("#{attr}_id")
end
if params["#{attr}_type"].present? && !model_specified
relation = search_context(relation).search_attribute("#{attr}_type")
end
relation = search_context(relation).search_attribute("#{attr}_id")
relation = search_context(relation).search_attribute("#{attr}_type")
relation
end

View File

@@ -65,8 +65,9 @@ class ActiveSupport::TestCase
CurrentUser.scoped(user, &block)
end
def assert_search_equals(expected_results, current_user: CurrentUser.user, **params)
results = subject.class.search(params, current_user)
def assert_search_equals(expected_results, current_user: User.anonymous, **params)
klass = subject.is_a?(ApplicationRecord) ? subject.class : subject
results = klass.search(params, current_user)
assert_equal(Array(expected_results).map(&:id), results.ids)
end

View File

@@ -229,6 +229,9 @@ class SearchableTest < ActiveSupport::TestCase
assert_search_equals(@mr2, model_type: "ForumPost", model_id: @mr2.model.id)
assert_search_equals(@mr3, model_type: "Dmail", model_id: @mr3.model.id)
assert_search_equals([@mr2, @mr1], model_type_not_eq: "Dmail")
assert_search_equals([], model_type: "Dmail", model_id_not_eq: @mr3.model_id)
assert_search_equals(@mr1, Comment: { body: @mr1.model.body })
assert_search_equals(@mr2, ForumPost: { body: @mr2.model.body })