在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