Ransack:页面大小可以自定义吗?

时间:2012-12-09 17:59:32

标签: ruby-on-rails spree ransack

我正在使用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'在第二种情况下不存在。我已经挖掘了搜索源,我找不到.page的定义。我想知道它是否包含在Spree引入的其中一个宝石中的一些class_eval的ActiveRecord :: Relation中。

某个地方的某个人必须面对这个问题并提出解决方案。我希望找到那个人的希望:P

jd

3 个答案:

答案 0 :(得分:3)

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

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

Kaminari.config.default_per_page = 1000

答案 1 :(得分:1)

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

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

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

您也可以将它放在一个初始化文件中,这样如果您从头开始重建数据库就不会意外删除它...我从Spree组中的this post了解到它。我还找到了有关设置Spree首选项here的详细信息。

答案 2 :(得分:0)

You want to use .per, for example:

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

Any of these will work.