2014-11-21 3 views
0

Мой вопрос здесь очень конкретный. У меня есть сборник результатов запроса Sunspot,Как использовать will_paginate с Sunspot Solr

@search = Product.search do 
    with(:website_id, id) 
    with(:archived_at, nil) 
    with(:category_id, restrictive_category_ids) 
    fulltext search_string do 
     phrase_fields(:name => 1, :artist => 3, :tag_list => 2) 
     minimum_match 0 #enables search to be performed by each word, not the whole phrase. 
    end 
    paginate :page => 1, :per_page => 2 
    end 

    @products = @search.results 

Это дает несколько страниц результатов с 2 на страницу. Все это проверяется в консоли с помощью Sunspot.

Моя проблема заключается в использовании will_paginate с результатами. Например, в представлении:

<%= will_paginate @products, param_name: 'products', class: 'pagination-nav' %> 

С @products возвращает только 2 результатов первоначального запроса, will_paginate думает, что есть только 2 результатов, и поэтому даже не появляется. Если я заменил @products на Product.all, он, очевидно, появится и отобразит страницы результатов.

Так что я не уверен, что мне нужно сделать, чтобы сказать will_paginate, сколько результатов на самом деле есть, поэтому он знает, сколько страниц нужно отображать. Конечно, я мог бы сделать отдельный запрос для всех этих записей, но это было бы большим перетаскиванием приложения и учитывая, что Sunspot утверждает, что работает с will_paginate, я предполагаю, что должен быть более простой способ.

Благодарим за помощь!

ответ

2

Я нашел ответ.

Вместо того, чтобы использовать @ search.results в методе «will_paginate» в представлении, мне нужно было использовать @ search.hits.

Использование «хитов» является ключевым. «results» возвращает количество результатов из разбитого аспекта в методе model.search. С другой стороны, «хиты» предоставляют массив записей, который отражает количество всего поиска, что позволяет корректно работать с разбитыми на страницы результатами.

-1

получить результаты от Solr затем искать модель по идентификаторам, которые SOLR вернулись и постраничными их, что-то вроде этого:

@search = Sunspot.search(Snippet) do 
    fulltext params[:search] 
end 
@styles = Product.where(id: @search.hits.map(&:primary_key)).paginate(page: params[:page], per_page: 3) 
Смежные вопросы