Will_Paginate ---设置开始记录?

时间:2010-10-30 19:59:20

标签: ruby-on-rails ruby-on-rails-3 will-paginate

我有一张photo_album 它有几张照片,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

问题是,如果网址是:/ photo_albums / 3 / photos / 10上面的代码从记录4开始,当我希望它在10处启动will paginate时,就像在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使用查看已点击的照片,但是已经显示了and_agagate 默认为页码 照片用户点击了

更新3 - 基于流程的控制器

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

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

2 个答案:

答案 0 :(得分:1)

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

使用控制器中的finder在视图中为您提供一个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

中的更多信息

修改

  

好的,谢谢,但是如何展示一个   “STARTING RECORD”意思是一张专辑   有8张照片,用户点击进入   见照片4,如何显示照片   在正确的分页顺序中,使用   INDEX?

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

<% @photos.each_with_index do |photo, index| do %>
  <%= link_to "View photo",
    photo_album_photos_path(@photo_album, :page => index) %>
<% end %>

答案 1 :(得分: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))