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.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
>
> 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 [email protected].
To post to this group, send email to [email protected].
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.

Reply via email to