3

我正在使用 Spree,在产品/搜索控制器操作中它使用 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”,而第二种方法中不存在。我已经挖掘了 ransack 的源代码,但找不到 .page 的定义位置。我想知道它是否可能包含在 Spree 引入的其中一个宝石中的 ActiveRecord::Relation 的一些 class_eval 中。

必须有人在某个地方遇到过这个问题并提出解决方案。我希望能找到那个人:P

京东

4

3 回答 3

4

.page方法来自 Kaminari gem,而不是 Ransack。

您可以通过更改 Kaminari 中的默认 per_page 值来使分页“巨大”:

Kaminari.config.default_per_page = 1000

于 2012-12-09T21:19:09.977 回答
1

Ryan 已经得到了你,但我不确定是否还有其他方法可以做到这一点。如果您只是在谈论每页显示的产品数量,我无法从您的问题中看出,但听起来您是。

如果是这样,我已经使用内置的 Spree 首选项进行了相同的修改products_per_page。当 Spree 提供偏好时,我更喜欢(不是双关语)使用它而不是修改 gem 参数,因为它已经是他们设计的一部分。

我用 启动控制台bundle exec rails c,然后运行以下命令将我商店的首选项设置为每页 16 个产品: Spree::Config.products_per_page = 16

您也可以将它放在您的一个初始化文件中,这样如果您从头开始重建数据库,它就不会被意外删除...我从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 回答