私はこれを乗り越えることができません。配列のページメソッドがないことを読んだことは知っていますが、どうすればよいですか?
コンソールでClass.allを実行すると、#が返されますが、Class.all.page(1)を実行すると、上記のエラーが発生します。
何か案は?
配列にはページメソッドがありません。
カミナリを使用しているようです。 Class.allは配列を返すため、ページを呼び出すことはできません。代わりに、Class.page(1)を直接使用してください。
通常の配列の場合、kaminariには優れたヘルパーメソッドがあります。
Kaminari.paginate_array([1, 2, 3]).page(2).per(1)
Kaminariに配列をページ付けするメソッドが追加されたため、コントローラーで次のような操作を実行できます。
myarray = Class.all
@results = Kaminari.paginate_array(myarray).page(params[:page])
Arrayの未定義のメソッドページが表示された場合は、おそらくkaminari gemを使用していて、コントローラーアクション内でモデルをページ分割しようとしています。
NoMethodError at /
undefined method `page' for # Array
そこで、ページ付けするコレクションはArrayまたはActiveRecordRelation、あるいはもちろん他の何かである可能性があることを2つ思い出す必要があります。
違いを確認するために、モデルがProductであり、indexアクションのproducts_controller.rb内にあるとします。 @ productsを次のいずれかで作成できます。
@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]
カミナリのフックを手動で呼び出すことで問題を修正しました。この行を追加して、最初の初期化子の1つで実行します。
Kaminari::Hooks.init
私は別の回答で詳細を投稿しました:
#<Array:0xc347540> kaminari "page"エラーの未定義のメソッドページ。Rails_admin
同じエラーが発生しました。バンドルの更新を行った後、サーバーを再起動しました。 2つのうちの1つがそれを修正しました。