3

私は Spree を使用しており、products/search コントローラー アクションでは Ransack を使用しています。Spree のドキュメントによると、Spree はページ サイズをカスタマイズする方法を提供していないため、アクション自体をカスタマイズして、Ransack を使用してページネーションを完全に無効にしようと考えました。Ransack は、結果をページ付けしない方法、または少なくともページ付けを大きくする方法をサポートしていますか?

これは、既存のコントローラー アクションのコードです。

@products = product_scope.ransack(params[:q]).result.page(params[:page])

その後に @products の型を入れると ActiveRecord::Relation です。私が入れたとき

@products = product_scope.ransack(params[:q]).result

これも ActiveRecord::Relation ですが、最初のケースでは、rabl テンプレートで使用されるメソッド「total_count」があり、2 番目のケースには存在しません。ransack のソースを調べましたが、.page が定義されている場所が見つかりません。Spree がプルする gem の 1 つで、ActiveRecord::Relation の class_eval に含まれているのではないかと考えています。

どこかで誰かがこの問題に直面し、解決策を考え出さなければなりません。私はその人を見つけることを期待しています:P

jd

4

3 に答える 3

4

この.pageメソッドは、Ransack ではなく、Kaminari gem に由来します。

Kaminari のデフォルトの per_page 値を変更することで、ページネーションを「巨大」にすることができます。

Kaminari.config.default_per_page = 1000

于 2012-12-09T21:19:09.977 に答える
1

ライアンはすでにあなたを捕まえていますが、それを行う別の方法がないかどうかはわかりません. あなたの質問からは、ページごとに表示される製品の数だけについて話しているのかわかりませんが、そうであるように聞こえます。

そうであれば、組み込みの Spree 設定を使用して同じ変更を行いましたproducts_per_page。Spree がプリファレンスを提供する場合、それはすでに設計の一部であるため、gem パラメータを変更するよりもそれを使用することを好みます (しゃれた意図はありません)。

でコンソールを起動しbundle exec rails c、次のコマンドを実行して、ストアの設定をページあたり 16 製品に設定しました。 Spree::Config.products_per_page = 16

データベースを最初から再構築する場合に誤って消去されないように、初期化ファイルの 1 つに入れることもできます... Spree グループのこの投稿からそれについて学びました。また、Spree の設定の詳細については、こちらを参照してください。

于 2012-12-10T05:07:01.483 に答える
0

.perたとえば、次のように使用します。

collection.per(100)
collection.page(3).per(100)
collection.per(100).per(3)

これらのいずれかが機能します。

于 2016-02-12T19:25:17.677 に答える