2014-10-30 106 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

相关问题