我正在尝试创建一个可以执行以下操作的查询,
Category
has_many Dates
default_scope { order(jobs_count: :desc) }
模型中使用Category
,其中jobs_count是一个计数器。在每个类别中,查询提供一系列作业
order.featured
排序,然后按日期排序(order
belongs_to job
)open: true
的作业。这可以通过范围来完成。这可以在3次调用数据库时使用吗?
尝试解决方案
在较高的层面上,我首先找到找到正确区域中的作业,其属性为open: true
如果我需要每个类别只显示20个作业,我会使用ruby的group_by
按类别对作业进行分组,尝试正确排序,然后删除除每个数组中前20个以外的所有作业。
我拿这些工作的ID。
我使用Category.includes(:jobs).where(jobs: { id: job_ids})
对Category表执行数据库调用。默认范围确保订单正确。
然而,我陷入了最后的障碍!我似乎无法订购以这种方式回来的工作。 default_scope似乎被忽略,我不知道如何将订单或范围应用于Category
查询中调用的作业。
这是解决问题的正确方法吗?有没有更简单的方法? Jobs.group_by(...)会更好 - 它似乎需要在ruby文档中传递原始SQL:http://guides.rubyonrails.org/active_record_querying.html#group