gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 23:28:23 24 4
gpt4 key购买 nike

所以我有一个图像(纹身)共享站点,其中包含 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com