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

Sort users based on most recent response to a particular answer in a survey?

我正在使用 Rails 5,PostgeSQL 9.4.5

尝试根据用户对调查中某个问题的最新回答对用户进行排序

到目前为止我有:

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

不确定要点什么。所有的回答都有数字 'scores' 代表它是哪个答案。我在想象最后的东西:

.order("answers.score ASC")

但我正在努力让这两个连接起来。我只想根据用户对该特定问题的最新回答对用户进行排序。 (他们可以多次参加调查) 我假设我需要在某些 SELECT 中设置一个字符串函数,但我正在努力思考它。

感谢任何帮助!

您可以像这样打印 rails 查询的实际 SQL:

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

然后可以order右边table.field(在SQL返回的SQL中找到table名字=13=]) 和 db/schema.rb

中的字段

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

更新

但是这将根据他们对问题的最后回答对所有 responses 而不是 users 进行排序,正如您在下面评论的那样。

在这种情况下,您必须:

  1. 根据用户的回答对用户进行分组

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

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

像这样:

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