При простом отображении больших объемов данных (более 100 тыс. Записей) мой код работает хорошо, и я выполняю пагинацию на сервере.
Однако, когда мне нужно отсортировать эти данные, я застреваю. Я сортирую только по странице, а НЕ сортирую по ВСЕМ записям, связанным с этим одним клиентом.
Как я могу разбивать на страницы, а также сортировать по всем записям моего клиента, а НЕ просто сортировать записи, возвращаемые с нумерации на стороне сервера?
Я также использую BootStrap Table для отображения всех моих данных.
Вот мой код, который получает все клиенты:
def get_customers
@data_to_return = []
@currency = current_shop.country_currency
customers = current_shop.customers.limit(records_limit).offset(records_offset)#.order("#{sort_by}" " " "#{sort_order}")
customers.each do |customer|
@data_to_return.push(
state: false,
id: customer.id,
email: customer.email,
accepts_marketing: customer.accepts_marketing,
customer_status: customer.customer_status,
tags: customer.tags)
end
sort_customers
end
И тогда это sort_customers
метод:
def sort_customers
fixed_data = data_to_return.sort_by {|hsh| hsh[sort_by]}
customer_size = current_shop.customers.length
if sort_order == "ASC"
fixed_data
else
fixed_data.reverse!
end
render json: {"total": customer_size, "rows": fixed_data}
end
В приведенном выше коде вы можете видеть, что data_to_return
исходит от get_customers
и его ограничения. Но я не хочу возвращать ВСЕХ клиентов по многим причинам.
Как я могу отсортировать по всем записям, но вернуть только разбитое на страницы подмножество?