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:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 })
|
||||
|
||||
|
||||
Reference in New Issue
Block a user