ruby-on-rails - 如何链接到属于 Rails 3 中对象的下一条或上一条记录?

标签 ruby-on-rails ruby-on-rails-3

所以我有一个图像(纹身)共享站点,其中包含 3 种不同的图像索引方式。只显示 Image.all 的主页,显示@member.images.all 的成员(member)图片,以及成员(member)的相册图片。也就是说,一个成员(member)有很多图片(和相册),一个相册有很多图片。

现在,当您单击图像时,无论它在哪里(索引、成员(member)个人资料或成员(member)相册),您都会进入显示页面。我想我可能需要一个上一个和下一个链接来显示下一个图像,但我需要能够将图像限制在它们的父容器中。

因此,如果我查看相册中的图像,我将需要下一个和上一个链接来仅链接到该相册中的图像。如果我查看的是不在相册中的成员图片,则链接将指向该成员(member)拥有的图片,而不是在相册中。

如果图像在首页,那么链接将只指向所有图像。

最佳答案

如果您不想分页,则必须进行额外的查询以确保指向下一个/上一个记录的链接准确无误。示例如下...

在您的图像模型中:

class Image < ActiveRecord::Base
  belongs_to :album

  def previous
    Image.where("album_id = ? AND id < ?", self.album.id, self.id).first
  end
  def next
    Image.where("album_id = ? AND id > ?", self.album.id, self.id).first
  end
end

然后在您的 Controller 中:
def show
  @current_image = Image.find(params[:id])
  @prev = @current_image.previous
  @next = @current_image.next

  respond_to do |format|
    format.html
  end
end

最后在您看来(这是 HAML 代码):
= link_to_unless(@prev.blank?, 'Prev', image_path(@prev))
= link_to_unless(@next.blank?, 'Next', image_path(@next))

请记住,previousnext可以返回 nil如果未找到上一个或下一个图像,则不应在该场景中显示上一个/下一个链接。

如果您最终使用 will_paginateKaminari gem(强烈推荐),你可以通过在你的 routes.rb 文件中添加一个匹配的路由来生成“漂亮”的路由:
match '/albums/:id/page/:page' => "albums#show"

# put the matched route above the regular :albums resource
# so it matches that route first if it's given a page
resources :albums

有效的原因是因为两个分页 gem 都使用 Rails url_for方法来生成上一个/下一个链接,因此 Rails 将匹配该路由并生成类似 http://rtattoos.com/albums/2/page/26 的内容。而不是 http://rtattoos.com/albums/2?page=26

关于ruby-on-rails - 如何链接到属于 Rails 3 中对象的下一条或上一条记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8825487/

相关文章:

javascript - 在 Javascript 中将日期时间字符串转换为单个时间单位(如秒)

ruby-on-rails-3 - 如何返回 rails 中不为空的列数

ruby-on-rails - 为什么rails.bat 可以工作,而rails 却不能?

ruby-on-rails - 如何将json数组中的数据保存到数据库MongoDB中?

javascript - Jquery Tokeninput 和动态嵌套表单

ruby-on-rails - 在 Active Record 中返回 sibling (child.parent.children)

ruby-on-rails - 批量分配的 ActiveAdmin 角色

ruby-on-rails - Rails 行为不当 wrt Postgres SERIAL NOT NULL 专栏

ruby-on-rails - 当用类名指定关联时,如何访问它? rails 3

ruby-on-rails - 炼油厂图像未加载 - 蜻蜓错误