page ----------------3------------------------
Recording Load (4.0ms) SELECT "recordings".* FROM "recordings" ORDER BY "recordings"."title" ASC LIMIT 4 OFFSET 8
1032
952
1063
1166 <<<<<<<<<<<<<<<<<<<<<<<<<< notice
page ----------------4------------------------
Recording Load (4.3ms) SELECT "recordings".* FROM "recordings" ORDER BY "recordings"."title" ASC LIMIT 4 OFFSET 12
1166 <<<<<<<<<<<<<<<<<<<<<<<<<< notice
1168
657
756
So record 1166 is on both pages
--------------------
how I solved it
class Uniqifyer
def self.uniqify not_uniq_field
uniq_string = not_uniq_field.to_s
# secure ordering e.g [13 , 120, 140 ] not [120, 13, 140]
prepend_str = '00000000000000'.byteslice(0...-uniq_string.length)
prepend_str + uniq_string + '_uuid_' + UUIDTools::UUID.timestamp_create().to_s
end
end
#in model:
before_commit :uniqify
def uniqify
self.MY_UNIQ_STRING = Uniqifyer.unigify self.MY_NOT_UNIQ_FIELD
end
# in controller
def index
@ordered_records = MY_MODEL.order(MY_UNIQ_STRING).page(params[:page]).per(24)
end
# Notice! Rube is so cool you can directly convert a uniqifyed number like this
number = MY_UNIQ_STRING.to_i
not so elegant
any suggestions are welcome