1

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

paginate在提交页面上显示链接时,我遇到了 Rails 2 中的方法的问题。我目前正在运行 Rails 3.2.3,并且我知道我需要使用 Rails 3 中的 gem (will_paginate我已包含在我的Gemfile.localhost:3000

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

特别是在 Links 控制器的第 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 中使用分页的正确方法吗?

4

2 回答 2

4

对于will_paginate,你应该在你的控制器中使用这样的东西:

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

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

要显示指向其他页面(链接)的链接,您可以在视图中的某处使用它:

will_paginate @links

您可以在这里找到更多帮助will_paginatehttps ://github.com/mislav/will_paginate

kaminari但是,对于 Rails 3,我更喜欢will_paginate. 它使用 Rails 3 范围。

它在控制器中看起来像这样:

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

这在视图中:

paginate @links

您可以在此处阅读更多信息kaminarihttps ://github.com/amatsuda/kaminari

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

于 2012-06-09T01:28:47.383 回答
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
于 2012-06-09T01:24:07.410 回答