Refactor sorting of images

Hi guys,

I am a bit stuck here, I know the following is damn wrong, but I
couldn’t figure out
a cleaner solution yet.

I have a bunch of images, each one has a published date and a ‘liked’
number.
A user can click like from an image once.
The index of the images can be sorted after ‘liked’, and ‘published’.

The show from an image has a next and prev button, so that you can
browse through the all images.
A picture has a next_picture and prev_picture method, so that it can
fetch it’s successor and predecessor.

pictures_controller

def index

@pictures = Picture.where(:state => ‘published’).paginate :page =>
params[:page], :per_page => per_page, :order => “#{sort_order.to_s}
DESC”

end

pictures model

def prev_picture
prev_picture = self.class.where(sort_order.gte =>
send(sort_order), :uid.ne => uid, :state =>
‘published’).order(sort_order).first
return nil if prev_picture.blank?
if send(sort_order).eql?(prev_picture.send(sort_order))
pictures = self.class.where(:state =>
‘published’).order("#{sort_order.to_s} DESC").all
(pictures.index(self) == 0) ? nil :
pictures[pictures.index(self)-1]
else
prev_picture
end
end

Ok, the next_piture method looks very similar. Basically this will
fetch the previous picture from the database. If the sort_order
attribute from both are the same,
it will fetch all pictures and grabs the one in the array before the
current one.
I tried the whole thing with a second order parameter, but it really
get’s complicated, as soon as I have to fetch the previous or next
picture.

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs