0

我有一张照片相册,里面有几张照片,ID:4,9,10,11,31 - 全部用于 photo_album:3

我的照片控制器中的 DEF SHOW 有以下内容:

@photo = @photoalbum.photos.order("created_at ASC").paginate :page => params[:page], :per_page => 1

问题是,如果 URL 是:/photo_albums/3/photos/10 上面的代码从记录 4 开始,当我希望它从 10 开始分页时,就像在 URL 中一样。

任何人都知道如何在 will_paginate 中设置起始 ID?

谢谢

更新

此外,注意到 PAGINATION 链接正在呈现链接:

/photos/10?page=2&photo_album_id=3

当他们应该像这样渲染时:

/photo_albums/3/photos/?page=2

听起来对吗?

以下是型号信息:

class PhotoAlbum < ActiveRecord::Base
    has_many :photos, :dependent => :destroy

class Photo < ActiveRecord::Base
    belongs_to :photo_album

更新 2 - 所需的用户流...

  • #1 - 用户看到相册列表
  • #2,用户点击相册
  • #3 用户看到相册中的照片列表
  • #4 使用查看点击的照片但有 will_paginate 显示并默认为用户点击的照片的页码

更新 3 - 基于流的控制器

  • 每个项目的相册 - PhotoAlbum Index
  • 每个相册的照片 - PhotoAlbum Show
  • 照片秀 - 照片秀

这听起来对吗?仍然在它,还没有运气。感谢任何建议。

4

2 回答 2

1

正如Jesse指出的那样,您应该使用index来显示照片列表,而不是show,即使每页只显示一张照片。

在控制器中使用查找器会在视图中为您提供 WillPaginate 对象:

def index
  @photos = @photoalbum.photos.order("created_at ASC").paginate :page => params[:page],
    per_page => 1
end

在视图中,will_paginate 知道 has_many 关系,因此它将包含父 photo_album 的参数

<%= will_paginate(@photos) %>

将下一个链接呈现为:

/photos?page=2&photo_album_id=3

您可能已经预料到/photo_albums/3/photos?page=2了,但 will_paginate 不使用嵌套资源路径。没关系,因为 URL 最终在同一个地方,即{ :controller => :photos, :action => :index, :photo_album_id => 3 }

如有必要,您可以显式传入父级以覆盖:

<%= will_paginate(@photos,:params => {:photo_album_id => 3}) %>

更多信息在will_paginate docs

编辑

好的,谢谢,但是如果相册有 8 张照片,并且用户点击查看照片 4,那么如何显示“STARTING RECORD”呢?如何使用 INDEX 以正确的分页顺序显示该照片?

您可以将页码添加到相册视图中的链接。也许是这样的:

<% @photos.each_with_index do |photo, index| do %>
  <%= link_to "View photo",
    photo_album_photos_path(@photo_album, :page => index) %>
<% end %>
于 2010-10-30T22:26:47.190 回答
0

我不确定你为什么使用 Show 方法。要使用分页,您应该使用 PhotoAlbum 控制器的 Index 方法。

所以你的链接应该是

link_to('Show Photos', photo_album_path(@photo_album, page=>params[:page])

如果您只想显示一张照片,很酷,但不要使用分页。

link_to('Photo), photo_album_photo_path(@photo_album, @photo))
于 2010-10-30T20:23:03.643 回答