Skip to content

Commit 3307708

Browse files
committed
multi_search: Use collection to infer class & index
1 parent 1aeb489 commit 3307708

File tree

3 files changed

+23
-2
lines changed

3 files changed

+23
-2
lines changed

lib/meilisearch/rails/multi_search.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ module Rails
55
class << self
66
def multi_search(searches)
77
search_parameters = searches.map do |(index_target, options)|
8-
index_target = options.delete(:index_uid) || index_target
8+
collection_class = options[:collection].respond_to?(:model) ? options[:collection].model : options[:collection]
9+
index_target = options.delete(:index_uid) || collection_class || index_target
910

1011
paginate(options) if pagination_enabled?
1112
normalize(options, index_target)

lib/meilisearch/rails/multi_search/result.rb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ def initialize(searches, raw_results)
1212
search_options[:class_name].constantize
1313
elsif target.instance_of?(Class)
1414
target
15+
elsif search_options[:collection]
16+
search_options[:collection]
1517
end
1618

1719
@results[target] = results_class ? load_results(results_class, result, collection: search_options[:collection]) : result['hits']
@@ -69,7 +71,9 @@ def to_h
6971

7072
private
7173

72-
def load_results(klass, result, collection: klass)
74+
def load_results(klass, result, collection:)
75+
collection ||= klass
76+
7377
pk_method = klass.ms_primary_key_method
7478
pk_method = pk_method.in if Utilities.mongo_model?(klass)
7579

spec/multi_search_spec.rb

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,5 +192,21 @@ def reset_indexes
192192
black, palm_pixi_plus
193193
)
194194
end
195+
196+
it 'infers the model' do
197+
results = MeiliSearch::Rails.multi_search(
198+
'colors' => { q: 'bl', collection: Color.all, index_uid: Color.index.uid }
199+
)
200+
201+
expect(results.to_h['colors']).to contain_exactly(blue, black)
202+
end
203+
204+
it 'infers the index as well as the model' do
205+
results = MeiliSearch::Rails.multi_search(
206+
'colors' => { q: 'bl', collection: Color }
207+
)
208+
209+
expect(results.to_h['colors']).to contain_exactly(blue, black)
210+
end
195211
end
196212
end

0 commit comments

Comments
 (0)