let me draw the big picture :
in my iatme controller ,before the display ( scope and pagination) , I
searched for geolocalized data of item ( with distance from the
search), and I get a sorted array of Item Ids, (already sorted on the
distance : item_ids = [ 5, 2, 1, 10, …] )
then I display the items using Kaminari pagination ( Kaminary doesn’t
paginate an array )
so I wonder if the result of the scope will keep the same order as the
item_ids
which means :
items.id IN [ 5, 2, 1, 10, …] will always get items records 5, 2,
1, 10 … in this order
that’s why I did not specified a sort order with the scope, is it
clear ?
As far as your clarification goes, well it depends on whether or not you
can sort with SQL. If you cannot, then you are left with sorting results
with your custom Ruby code.
BTW Kaminari can paginate an arbitrary array, so you might work with
that
(by defining a sorting method or something more/less complicated).
thanks , I uses I was not clear enough…
if I do: where(:id => item_ids).order(‘id DESC’) then the output
will not be what I want
in this case,
items.id IN [ 5, 2, 1, 10, …] will give => [1, 2, 5, 10, …]
this is exactly what I don’t want … I want to keep: where(:id =>
item_ids) with order the same as the array
It will not be sorted. You just pass an array basically to that named
scope. And you will get results that satisfy the array so to speak, but
it
can come in any order. Just add .order(‘id DESC’) (or ASC) clause
explicitly.
OK, and thanks a lot
using Kaminari.paginate_array(@geo_items) solved my issue …
I can get an array of items in which I can insert the distance from
the search point and sort the array on this distance…
I could not save this info into the item instance as it depends upon
each user’s search …
Sure, glad it helped, it’s not a trivial problem you’ve just taken care
of!
I mean that’s the process basically (until you deploy to prod at least):
fix thing A, then fix things B and C that depended on previous A’s
implementation and so on. Try to get into RSpec so that a solved problem
stays that way.