根据调查中特定答案的最新响应对用户进行排序?

时间:2016-12-07 16:46:27

标签: ruby-on-rails rails-activerecord psql

我正在尝试根据使用Rails 5,PostgeSQL 9.4.5的调查中某个问题的最新响应对用户进行排序

到目前为止,我已经:

User.includes(responses: [answer: :question]).where(questions: {id: X}).order(...)

不确定要在订单中放入什么。答案都有数字“分数”,代表答案。我最终想象的是:

.order("answers.score ASC")

但是我很难让两人相依为命。我只想根据他们对该特定问题的最新答案对用户进行排序。 (他们可以多次参加调查) 我假设我需要在某些SELECT中设置一个字符串函数,但我很难绕过它。

感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

您可以打印rails查询的实际SQL,如下所示:

User.includes(responses: [answer: :question]).where(questions: {id: X}).to_sql

然后你可以通过正确的 table.field order(找到to_sql返回的SQL中的表名)和db/schema.rb <中的字段/ p>

它应该是created_atUser...order('responses.created_at DESC')

<强>更新

但是,根据您在上面的评论,这会对所有responses而不是users进行排序。

在这种情况下,你必须:

  1. 按用户的回复对用户进行分组

  2. 计算每个用户的最后一个响应(MAX(user_responses.created_at))

  3. 按最后回复对用户进行排序

  4. 这样的事情:

    User
      .includes(responses: [answer: :question])
      .where(questions: {id: X})
      .group('users.id')
      .order('MAX(responses.created_at) DESC')