问题是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
答案 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.