2014-10-30 110 views
0

我已經瞭解到,我無法做一個連接,然後在ActiveRecord中訂購。這似乎也適用於pg_search的full_text_search方法。例如,這不適用我期望的排序:如何在Rails中對多個(ASC和DESC)字段進行排序或排序全文搜索?

self.full_text_search(search_params).where(where_string).order(order_string).page(page_number).per(items_per_page) 

之後我必須sort_by嗎?我基本上有這樣一個order_array: [「問題ASC」,「答案DESC」],可以做到這一點,但必須有更好的方式,不是嗎?

+0

'self.where(where_string).order(order_string).full_text_search(search_params)。第(PAGE_NUMBER頁)。 per(items_per_page)'試試這 – anusha 2014-10-30 02:56:36

+0

唯一的問題是,我們的全文搜索按排序找到的項目排序......也許我可以禁用 – 2014-10-30 17:33:09

回答

1

你可以排序之後,你只需要分頁的時候來處理它作爲一個數組:

order_array = ["question ASC", "answer DESC"] 
search_results = self.full_text_search(search_params).where(where_string) 

begin 
order_array.reverse.each do |s| 
    s_array = s.split 
    s_by = s_array[0] 
    s_order = s_array[1] 
    search_results.to_a.sort!{ |x,y| 
    if s_order.present? && s_order.downcase == 'desc' 
     y[s_by] <=> x[s_by] 
    else 
     x[s_by] <=> y[s_by] 
    end 
    } 
end 
search_results = Kaminari.paginate_array(search_results).page(page_number).per(items_per_page) 
rescue => e 
logger.error "Failed to sort results of full text search: #{e.message}" 
search_results.page(page_number).per(items_per_page) 
end 
+0

哇,謝謝@ user3642602。 +1爲正確的Kaminari.paginate_array翻譯。 – 2014-10-30 21:44:09

+1

我必須做的另一件事是比較這些項目時檢查零。如果y [s_by}或x [s_by]爲零,則會收到異常。 – 2014-11-04 21:29:58

相關問題