【发布时间】:2019-01-30 15:56:43
【问题描述】:
我正在尝试进行查询,但似乎无法破解它的语法。因此,我需要获取本月最近的调查,将其限制为 5,然后按作为调查响应的相关表的计数进行排序。因此,如果一项调查有 8 个回复和另外 4 个回复,则有 8 个回复将显示在顶部。
我设置了一个范围来查找当月的调查,但要么我需要放弃它以进行更复杂的查询,要么找到一种方法以最大 survey.response_count 对其进行排序。
这是我得到的最接近的,但仍然不正确。
@sorted_active_surveys = Survey.joins(:survey_responses).group(:survey_id).order('COUNT(survey_responses.survey_id) DESC')
如果我尝试结合范围,created_at 日期会变得模棱两可并出现错误。
调查.rb
scope :for_month, ->(date) { where("MONTH(created_at) = ?", date.month).limit(5) }
这也会产生同样的错误
scope :for_month, ->(date) { where("MONTH(survey.created_at) = ?", date.month).limit(5) }
任何帮助将不胜感激。
【问题讨论】:
-
在您上一个代码示例中,我相信您想说
surveys.created_at而不是survey.created_at。这可能不是你的问题,但我想指出这一点。 -
你是对的,我需要在那里使用复数。我不会写很多这样的查询,所以试图弄清楚。谢谢
标签: mysql ruby-on-rails-4