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_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@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.

No comments:

Post a Comment