gpt4 book ai didi

ruby-on-rails - Rails : Previous and Next record from previous query

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

我的应用程序包含照片,用户可以搜索符合特定条件的照片。假设某个用户通过标签搜索照片,我们得到如下信息:

@results = Photo.tagged_with('mountain')

现在, @results将成为具有多个记录的标准activerecord查询。这些将显示在网格中,然后用户可以单击照片。这会将用户带到 photos#show操作。

因此,可以说用户搜索了一些内容,应用程序找到了5条记录 [1,2,3,4,5],并且用户单击了照片#3。

我希望在 photo#show页面上显示“下一张照片”,“上一张照片”和“返回搜索”。

唯一的其他限制是,如果用户直接浏览照片(通过另一个页面或书签等),则不会有逻辑的“下一张”和“上一张”照片,因为没有查询将其引向该照片。照片,因此在这种情况下,模板根本不应该呈现与查询相关的内容。

因此,我一直在思考如何做这种事情,但我实际上并没有很多好的想法。我想我可以做一些事情,例如将查询存储在 session 中以便能够返回到它,但是我不知道如何找到显示在所选照片左右两侧的照片。

有人有做这种事情的例子吗?

最佳答案

因此,经过反复尝试,这是我想到的:

在我的照片模型中:

# NEXT / PREVIOUS FUNCTIONALITY
def previous(query)
unless query.nil?
index = query.find_index(self.id)
prev_id = query[index-1] unless index.zero?
self.class.find_by_id(prev_id)
end
end

def next(query)
unless query.nil?
index = query.find_index(self.id)
next_id = query[index+1] unless index == query.size
self.class.find_by_id(next_id)
end
end

此方法通过接受这些记录ID的数组,从搜索或特定的文件夹 View 返回下一条和上一条记录。我在创建查询 View 的任何 Controller View (即搜索页面和按文件夹浏览页面)中生成该ID:

因此,例如,我的搜索 Controller 包含:
def search
@search = @collection.photos.search(params[:search])
@photos = @search.page(params[:page]).per(20)
session[:query] = @photos.map(&:id)
end

然后photo#show Action 包含:
if session[:query]
@next_photo = @photo.next(session[:query])
@prev_photo = @photo.previous(session[:query])
end

最后,我的观点包括:
- if @prev_photo || @next_photo
#navigation
.header Related Photos
.prev
= link_to image_tag( @prev_photo.file.url :tenth ), collection_photo_path(@collection, @prev_photo) if @prev_photo
- if @prev_photo
%span Previous
.next
= link_to image_tag( @next_photo.file.url :tenth ), collection_photo_path(@collection, @next_photo) if @next_photo
- if @next_photo
%span Next

现在事实证明,这在常规浏览情况下非常有效-但我还没有解决一个陷阱:

从理论上讲,如果用户搜索 View ,然后跳转到他们在 session 中生成查询的照片。如果由于某种原因他们随后直接(通过URL或书签)浏览到先前查询中的另一张照片,则该查询将在 session 中持续存在,并且相关照片链接仍将在第二张照片上可见-即使他们不应该在通过书签加载的照片上。

但是,在实际的用例中,这种情况实际上很难重现,并且代码目前运行良好。在某个时候,当我为剩下的一个陷阱提出一个好的解决方案时,我会发布它,但是现在,如果有人使用此想法,请注意存在这种可能性。

关于ruby-on-rails - Rails : Previous and Next record from previous query,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5452937/

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