Rails:Next/Previous按钮用于数据库中的图像



我有一些图像可以点击下一个和上一个,但我遇到了麻烦,因为当我查看数据库中的最后一个图像(与user_id关联)时,它显示了路由错误:id=>nil。

之所以会发生这种情况,是因为在该用户的图像之后没有更多的数据。所以我如何设置它将旋转他们的图像,即使他们到达数据库中的最后一个图像(如果是下一个),反之亦然,如果是上一个。

这是我的型号

  def self.s_prev(img)
    first(:conditions => ["created_at < ?", img.created_at], :order => "created_at desc")
  end
  def self.s_next(img)
    first(:conditions => ["created_at > ?", img.created_at], :order => "created_at asc")
  end

这些是我的链接

<%= link_to "Previous", user_image_path(@image.user_id, @user.images.s_prev(@image)) if user_image_path(@image.user_id, @user.styles.s_prev(@image)) %>
<%= link_to "Next", user_image_path(@image.user_id, @user.images.s_next(@image)) if user_image_path(@image.user_id, @user.images.s_next(@image)) %>

显然if语句对我没有帮助,出于某种原因

假设有这些图像表的数据库id:

id    user_id 
1       14
2       14
3       14
4       15

所以,如果我在这个页面上:localhost:3000/users/14/images/2

页面会显示,链接也会显示,但当我点击下一步时,我会收到一个错误,因为没有user_id=>15和id=>4,下一步按钮试图在...users/14/images/3 中获取页面的localhost:3000/users/14/images/4

那么,我如何避免这个问题,只显示与用户关联的下一个/上一个链接呢?

def self.s_prev(img)
  ordered = scoped.order("created_at desc")
  ordered.first(:conditions => ["created_at < ?", img.created_at]) || ordered.first
end
def self.s_next(img)
  ordered = scoped.order("created_at asc")
  ordered.first(:conditions => ["created_at > ?", img.created_at]) || ordered.first
end

最新更新