2014-11-21 64 views
0

我的問題在這裏是非常具體的。我收集了太陽黑子查詢的結果集,如何使用will_paginate與太陽黑子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頁。所有這一切都通過與太陽黑子的控制檯進行驗證。

我的問題是試圖使用will_paginate結果。例如,在視圖中:

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

由於@products只返回2個結果初始查詢,will_paginate認爲只有2個結果,並且因此也不出現。如果我用Product.all替換@products,它顯然會出現並顯示結果頁面。

所以我不知道我需要做些什麼來告訴will_paginate實際上有多少結果,所以它知道要顯示多少個頁面。當然,我可以對所有這些記錄做一個單獨的查詢,但是這會對應用程序造成很大的阻礙,並且假設Sunspot聲稱與will_paginate一起工作,我假設必須有一個更簡單的方法。

感謝您的幫助!

回答

2

我找到了答案。

而不是在視圖中的「will_paginate」方法中使用@ search.results,我需要使用@ search.hits。

使用「點擊」是關鍵。 「結果」僅返回model.search方法中分頁方面的結果數量。另一方面,「點擊」提供了一組反映整個搜索量的記錄,因此可以使分頁結果正常工作。

-1

得到Solr的結果再由SOLR返回IDS搜索模型和它們分頁,像這樣:

@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)