2011-08-03 4 views

答えて

34

いいえ配列にはページメソッドがありません。

あなたはカミナリを使用しているようです。 Class.allは配列を返します。したがって、ページを呼び出すことはできません。代わりにClass.page(1)を直接使用してください。通常の配列の場合

、雷は偉大なヘルパーメソッドがあります。

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

もClass.pageをしようと雷 –

+0

を参照しようとしたとき、私は初期化されていない定数を取得しています(1)は私にクラスのための未定義のメソッド 'page'を与えます:Class –

+0

実際にkaminariをあなたのGemfileに追加してロードしましたか? –

0

私は同じエラーが発生しました。バンドルの更新がサーバーを再起動しましたか? 2人のうちの1人がそれを修正しました。あなたのコントローラでこのような何かを行うことができますので

10

雷は今、アレイのページ付けする方法があります。

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

私はKaminariのための未定義のメソッド "paginate_array"を取得しました:モジュールこれを解決するには? –

+0

@ÞÞawあなたはKaminariの古いバージョンを使用していたようです。 – DaveStephens

3

:私は別の答えに詳細を掲載

Kaminari::Hooks.init 

:あなたの最初の初期化子のいずれかで実行するには、この行を追加します。 kaminari gemです。コントローラーアクション内でモデルのページを変更しようとしています。そこ

NoMethodError at/
undefined method `page' for # Array 

あなたがページ付けて喜んでいるコレクションはアレイか、他ActiveRecordRelationまたはofcourseのものになる可能性があること、二つのあなたの自己を思い出させる必要があります。

違いを表示するには、我々のモデルは、製品であり、我々はproducts_controller.rbに私たちのインデックスアクションの中にあると言うことができます。

@products = Product.all 

または

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

か、他なめらか ...など

我々が得るいずれかの方法を:私たちは、次のいずれかを言うことができます私たちの@productsとを構築することができますあなたの@製品、しかし、クラスは異なります。我々は雷ページ付けて喜んでいるコレクションのクラスに応じて

@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

関連する問題