在 Rails 3 问题中分页



我目前正在开发一个在Rails 2中编写的Reddit克隆应用程序,我正在尝试通过Rails 3中的新功能使其跟上速度。该应用程序非常简单,它有一个链接脚手架,其中包含:url:description:points:created_at。该应用程序路由到links#submissions,您可以在其中查看所有提交的链接并提交新链接。

在提交页面上显示链接时,我在 Rails 2 中的 paginate 方法遇到了问题。我目前正在运行 Rails 3.2.3,我知道我需要使用 Rails 3 中的 gem will_paginate(我已包含在我的 Gemfile 中),但是每当我尝试拉起localhost:3000时,我都会收到以下错误消息:

NoMethodError in LinksController#submissions...
undefined method paginate for #<LinksController:0x00000102ff5f98>

特别是在链接控制器的第 90 行。

这是我在我的LinksController.rb(第90-93行)中的内容。

@link_pages, @Links = paginate :links, :order => order, :per_page => 20
@header_text = case ordering
    when 'hot' then 'Top rated submissions'
when 'new' then 'Latest submissions'

这不是在 Rails 3 中使用分页的正确方法吗?

对于will_paginate,您应该在控制器中使用类似的东西:

@links = Link.paginate(:page => params[:page], :per_page => 20)

在您看来,给定页面的链接将存储在@links实例变量中。 您可以循环访问该集合并显示链接。

要显示指向其他页面(链接的链接)的链接,请在视图中的某个位置使用它:

will_paginate @links

您可以在此处找到有关will_paginate的更多帮助:https://github.com/mislav/will_paginate

但是,对于Rails 3,我更喜欢kaminari而不是will_paginate。 它使用 Rails 3 作用域。

在控制器中如下所示:

@links = Link.page(params[:page]).per(20)

这在观点中:

paginate @links

您可以在此处阅读有关kaminari的更多信息:https://github.com/amatsuda/kaminari

你也可以在这里观看Ryan's Railscast kaminari:http://railscasts.com/episodes/254-pagination-with-kaminari

您需要在模型上调用分页,因此

Link.paginate :page => params[:page], :per_page => 20

Link.[arel query].paginate :page => params[:page], :per_page => 20

应该工作。

要按创建的降序示例排序,您需要执行以下操作:

Link.order("created_at DESC").paginate :page => params[:page], :per_page => 20

最新更新