如何在Rails中对多个(ASC和DESC)字段进行排序或排序全文搜索?
问题描述:
我已经了解到,我无法做一个连接,然后在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”],可以做到这一点,但必须有更好的方式,不是吗?
答
你可以排序之后,你只需要分页的时候来处理它作为一个数组:
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
'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
唯一的问题是,我们的全文搜索按排序找到的项目排序......也许我可以禁用 – 2014-10-30 17:33:09