Ruby on Rails
Tuesday, October 28, 2014
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 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_inot so elegantany 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@googlegroups.com.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
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.
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment