Consider this schenario where I'm having pagination on a page
@recordings = Recording.order(:title).page(params[:page]).per(4)
puts params[:page]@recordings.each do |recording|
puts recording.id
end
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
endend
#in model:before_commit :uniqifydef uniqify
self.MY_UNIQ_STRING = Uniqifyer.unigify self.MY_NOT_UNIQ_FIELDend
# in controllerdef 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
thisnumber = MY_UNIQ_STRING.to_i
not so elegant
any suggestions are welcome
--
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to
rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
To view this discussion on the web visit
https://groups.google.com/d/msgid/rubyonrails-talk/f9eadd8e-f05c-4afe-a5c6-d821799d9934%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.