【发布时间】:2016-02-23 14:25:53
【问题描述】:
我正在构建一个实现过滤和排序功能的索引控制器。
我的第一次询问与订购有关:
我的模型定义了 2 个布尔字段,我们可以将它们称为优先级:
field :domination, type: Boolean, default: false
field :critical_alert, type: Boolean, default: false
前端公开了 3 个优先级(从最前面到最不重要): -critical_alert(过滤将此标志设置为true的项目) - 支配(过滤将此标志设置为真的项目) - 正常(没有将这两个字段设置为 true 的元素)
假设有一个order_by 功能公开,我们希望按优先级进行过滤。
在这种情况下,order_by:asc 将导致按如下方式订购项目:
critical_alert 然后是 domination 然后 normal 优先项目。
我的第一个想法是将结果分成每个组,然后按正确的顺序合并:
## Event has a filterable concern that implements the filter method
partition = {}
partition[:critical] = Event.filter(filtering_params(params)).select {|e| e.critical_alert}
partition[:domination] = Event.filter(filtering_params(params)).select {|e| e.domination}
partition[:normal] = Event.filter(filtering_params(params)).select {|e| !e.domination and !e.critical_alert}
pageable = partition[:critical] + partition[:domination] + partition[:normal]
我的问题是我还需要对结果进行分页。似乎 page 方法仅在 activeRecord 实例上可用。我有点受挫。构建直接应用于 1 个属性的过滤器很好,但这有点不正常。
附带问题:控制器是否适合使用此逻辑?
有没有办法以一种简洁的方式实现这一点,这意味着尽可能多地利用 Rails 功能?
【问题讨论】:
标签: ruby-on-rails ruby mongodb mongoid