我目前正在开发一个我在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的正确方法吗?
答案 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
您可以在此处详细了解kaminari
:https://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