在Rails 3问题中的Paginate

时间:2012-06-09 01:18:05

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

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

在提交页面上显示链接时,我遇到了Rails 2中paginate方法的问题。我目前正在运行Rails 3.2.3并且我理解我需要在Rails 3中使用gem will_paginate(我已经包含在我的Gemfile中)但是每当我尝试拉{{1}时我收到此错误消息:

localhost:3000

具体在Links控制器的第90行。

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

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

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

2 个答案:

答案 0 :(得分:4)

对于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

您可以在此处详细了解kaminarihttps://github.com/amatsuda/kaminari

此外,你可以在kaminari {{1}}观看Ryan的Railscast:http://railscasts.com/episodes/254-pagination-with-kaminari

答案 1 :(得分:1)

你需要在模型上调用paginate,所以

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