在Rails 3问题中的Paginate

我目前正在研究一个我在Rails 2中编写的Reddit克隆应用程序,我正试图通过Rails 3中的新function加快速度。应用程序非常简单,它有一个Links scaffold,它有: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 # 

特别是在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中使用paginate的正确方法吗?

对于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 on kaminari : http : kaminari

你需要在模型上调用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