2011-08-03 51 views

回答

34

否數組沒有頁面方法。

看起來像你使用kaminari。 Class.all返回一個數組,因此你不能調用它的頁面。相反,請直接使用Class.page(1)。

對於普通陣列,雷有很大的輔助方法:

Kaminari.paginate_array([1, 2, 3]).page(2).per(1) 
+0

嘗試引用雷 –

+0

也試圖Class.page時,我發現了一個未初始化的常數(1)爲我提供了未定義的方法'頁面'Class:Class –

+0

您是否已經將kaminari加入到您的Gemfile中? –

0

我有同樣的錯誤。捆綁包更新是否重新啓動服務器。其中一個固定它。

10

雷現在有分頁陣列的方法,所以你可以做這樣的事情在你的控制器:

myarray = Class.all 
@results = Kaminari.paginate_array(myarray).page(params[:page]) 
+0

我得到一個未定義的方法「paginate_array」Kaminari:模塊如何解決這個問題? –

+0

@Þaw聽起來就像你使用的是舊版本的Kaminari。 – DaveStephens

3

當你的陣列一個未定義的方法頁,也許你正在使用kaminari寶石,你正在嘗試在控制器動作中對你的模型進行分頁。

NoMethodError at/
undefined method `page' for # Array 

有你需要提醒你的兩件事情自我,那你願意分頁集合可能是一個陣列ActiveRecordRelation或ofcourse別的東西。

要看到差距,可以說我們的模型是產品,我們是我們指數行動中對products_controller.rb。我們可以構建我們的@products與讓說下列之一:

@products = Product.all 

@products = Product.where(title: 'title') 

水木清華否則...等

我們得到的要麼方法你的@產品,但是這個類是不同的。

@products = Product.all 
@products.class 
=> Array 

@products = Product.where(title: 'title') 
@products.class 
=> Product::ActiveRecordRelation 

因此視類的集合,我們都願意分頁雷的提供:

@products = Product.where(title: 'title').page(page).per(per) 
@products = Kaminari.paginate_array(Product.all).page(page).per(per) 

總結了一點,這是添加分頁的好方法到你的模型:

def index 
    page = params[:page] || 1 
    per = params[:per] || Product::PAGINATION_OPTIONS.first 
    @products = Product.paginate_array(Product.all).page(page).per(per) 

    respond_to do |format| 
    format.html 
    end 

end 

,並要分頁模式(product.rb)內:

paginates_per 5 
# Constants 
PAGINATION_OPTIONS = [5, 10, 15, 20] 
+0

很好解釋:) ..謝謝 – inquisitive

相關問題