ruby-on-rails – 如何链接到属于Rails 3中对象的下一个或上一个
所以我有一个图像(纹身)共享网站有3种不同的索引图像方式.显示
Image.all的主页面,显示@ member.images.all的成员图像,以及成员的专辑图像.也就是说,一个会员有很多图像(和专辑),一个专辑有很多图像.
现在,当您点击图片时,无论其位于何处(索引,会员的个人资料或会员专辑),您都可以进入展示页面.我想我可能需要一个上一个和下一个链接来显示下一个图像,但我需要能够将图像限制到它们的父容器. 因此,如果我正在查看相册中的图像,我需要下一个和上一个链接才能链接到该相册中的图像.如果我正在查看会员的图像而不是在相册中,那么链接将指向会员所拥有的图像,而不是相册中的图像. 如果图像位于首页,则链接将指向所有图像. 解决方法
如果您不想分页,则必须执行其他查询以确保指向下一个/上一个记录的链接是准确的.示例如下……
在您的图像模型中: 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.id).first end end 然后在你的控制器中: 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)) 请记住,如果没有找到上一个或下一个图像,则上一个和下一个可以返回nil,因此您不应该在该场景中显示上一个/下一个链接. 如果您最终使用will_paginate或Kaminari 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 有效的原因是因为两个分页宝石都使用Rails url_for方法生成上一个/下一个链接,因此Rails将匹配该路由并生成类似http://rtattoos.com/albums/2/page/26而不是http://rtattoos.com/albums/2?page=26的内容 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |