Ruby on Rails
Wednesday, November 5, 2014
On Tuesday, 28 October 2014 09:14:56 UTC-4, Max Grønlund wrote:
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.idendpage ----------------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 756So record 1166 is on both pages-------------------- how I solved itclass 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
Are you on Postgresql? It takes a very literal interpretation of the SQL standard when row order isn't uniquely specified:
http://dba.stackexchange.com/questions/48989/postgresql-indeterminate-ordering-of-results
Sorting on something that's reliably unique (even just `id` along with `title`) should sort this out.
--Matt Jones
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/59e2a6bd-be59-4ad0-91cd-32e005b7ca5c%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment