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.
--
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en.