我正在使用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
答案 0 :(得分:3)
.page
方法来自Kaminari宝石,而不是Ransack。
您可以通过更改Kaminari中的默认per_page值来使分页“变大”:
Kaminari.config.default_per_page = 1000
答案 1 :(得分:1)
如果是这样,我使用内置的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.