2012-06-09 63 views
1

我目前正在研究一個我在Rails 2中編寫的Reddit克隆應用程序,並且試圖通過Rails 3中的新功能加速它的速度。該應用程序非常簡單,它具有鏈接腳手架,其具有:url,:description,:points:created_at。該應用程序路線links#submissions,您可以查看所有提交的鏈接,並提交一個新的鏈接。Paginate in Rails 3 issues

在提交頁面上顯示鏈接時,我遇到了Rails 2中paginate方法的問題。我目前正在運行的Rails 3.2.3,我明白,我需要使用寶石will_paginate在Rails 3中(我已包括在我的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中使用paginate的正確方法嗎?

回答

4

對於will_paginate,你應該在你的控制器使用這樣的給定頁面的鏈接將存儲在@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的Railscast on kaminari here:http://railscasts.com/episodes/254-pagination-with-kaminari

+0

老兄真棒感謝指出'kaminari' ...方式容易,我喜歡配置能力 –

1

你需要調用分頁的模式,所以

Link.paginate :page => params[:page], :per_page => 20 

Link.[arel query].paginate :page => params[:page], :per_page => 20 

應該工作。

通過創建降序例如要訂購,你會做這樣的事情:

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

在你看來,:

Link.order("created_at DESC").paginate :page => params[:page], :per_page => 20 
+0

奇怪我嘗試了'Link.paginate'但是得到了這個錯誤'ArgumentError在LinksController#提交,參數的錯誤數量(0爲1)' –

+0

對不起,你仍然需要傳遞你的參數:Link.paginate:page => params [:page],:per_page => 20 –

+0

哦,甜美的感謝....這使它的工作! –