Я делаю поиск благодаря API Алголии.
Это мой код для метода поиска:
string_filter = []
filters_params = [:type_of_rent,:type_of_property,:type_of_ad,:state]
filters_params.each do |fp|
if params[fp].present?
params[fp].each do |s|
string_filter << fp.to_s + ':' + s
end
end
end
price_filter = []
if params['min-price'].present? || params['max-price'].present?
if !params['min-price'].present? || params['max-price'].present?
price_filter = ["price: 0 TO #{params['max-price']} "]
elsif params['min-price'].present? || !params['max-price'].present?
price_filter = ["price: #{params['min-price']} TO 1000000000 "]
else
price_filter = ["price: #{params['min-price']} TO #{params['max-price']} "]
end
end
@results = []
@results = Ad.search(params[:keyword],numericFilters: price_filter,facetFilters: string_filter, page: params[:page])
session[:results] = @results.pluck(:id)
end
Получив результаты поиска, я отображаю результаты поиска для их отображения.
В этом представлении мне нужно отсортировать результаты по цене и rentability_value.
Я пытался хранить @results в сеансе, чтобы получить их в методе фильтра (код ниже), но из-за разбивки на страницы, сделанной algolia, у меня есть только 10 первых результатов, хранящихся в сеансе [: results].
def filter
@ads = []
session[:results].each do |id|
@ads << Ad.find(id)
end
case params[:sort_by]
when "price_asc_to_desc"
@results = Kaminari.paginate_array(@ads.sort_by{|t| t.price.to_i}).page(params[:page])
when "price_desc_to_asc"
@results = Kaminari.paginate_array(@ads.sort_by{|t| - t.price.to_i}).page(params[:page])
when "renta_asc_to_desc"
@results=Kaminari.paginate_array(@ads.sort_by{|t|t.rentability_value.to_i}).page(params[:page])
when "renta_desc_to_asc"
@results = Kaminari.paginate_array(@ads.sort_by{|t| t.rentability_value.to_i}).page(params[:page])
end
end
Я искал в Алголии сделать c, но ничего о сортировке не получилось в бэк-энде.
Что вы думаете о моей реализации? Спасибо за ваши ответы.