如何获取用户之前的照片?

时间:2016-10-14 16:16:23

标签: ruby-on-rails

问题是previous_modal方法返回数据库中的上一张照片,而不是 @user 上一张照片。

例如,如果@user有id为10,9,8,7,6,1的照片,我打开照片ID 6的模态,然后单击上一步,它将href设置为5,而不是1。 / p>

UsersController

def show
  @user = User.find(params[:id])
  @photos = @user.photos.approved.order('created_at desc').paginate(page: params[:page], per_page: 9)
    respond_to do |format|
      format.html
      format.js
    end
 end

 users/show.html.erb

 <% @photos.in_groups_of(3, false).each do |group| %>
   <% group.each do |photo| %>
   ...
   <div class="modal" id=<%="#{photo.id}"%> tabindex="-1" role="dialog">
   ...
   <a class="previouslink" data-dismiss="modal" data-toggle="modal" href=<%="#"+"#{photo.previous_modal.id}"%>>
   ...

class Photo 

def previous_modal 
  if self.class.approved.where("id < ?", id).last == nil
    return self
  else
    return self.class.approved.where("id < ?", id).last
  end  
end 

2 个答案:

答案 0 :(得分:1)

在您的previous_modal方法上,您可以按created_at搜索...而不是按ID搜索:

def previous_modal 

  if self.class.approved.where("created_at < ?", self.created_at).last == nil
    return self
  else
    return self.class.approved.where("created_at < ?", self.created_at).last
  end  
end 

为了更清洁的代码,我建议:

def previous_modal 
  last_photo = self.class.approved.where("created_at < ?", self.created_at).last
  last_photo ? last_photo : self        
end 

它可以像上面一样工作。希望它有所帮助!

编辑:

我不确定你会怎么得到那个[10,9,8,7,6,1]阵列,但是一旦你拥有它,它很容易......你必须找到下一个/上一个位置的id照片。可以想到这样的事情:

def previous_modal 

    photo_ids = self.user.photos.map(&id) #Get all photos ids for that user
    self_index = photos_ids.index(self.id) #Get the index of this particular object id
    previous_photo = Photo.find_by_id(photos_ids[self_index-1]) #Find the previous one
    return (previous_photo || self)
end 

但是我想,在这种情况下,返回的photo_ids将被订购,因此产生与上面相同的结果。你必须找到一种方法来维护该阵列与照片顺序的历史...祝你好运!

答案 1 :(得分:0)

我通过添加:

解决了这个问题
.where("user_id" => self.user.id) into the code.