我正在尝试根据使用Rails 5,PostgeSQL 9.4.5的调查中某个问题的最新响应对用户进行排序
到目前为止,我已经:
User.includes(responses: [answer: :question]).where(questions: {id: X}).order(...)
不确定要在订单中放入什么。答案都有数字“分数”,代表答案。我最终想象的是:
.order("answers.score ASC")
但是我很难让两人相依为命。我只想根据他们对该特定问题的最新答案对用户进行排序。 (他们可以多次参加调查)
我假设我需要在某些SELECT
中设置一个字符串函数,但我很难绕过它。
感谢任何帮助!
答案 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_at
。 User...order('responses.created_at DESC')
<强>更新强>
但是,根据您在上面的评论,这会对所有responses
而不是users
进行排序。
在这种情况下,你必须:
按用户的回复对用户进行分组
计算每个用户的最后一个响应(MAX(user_responses.created_at))
按最后回复对用户进行排序
这样的事情:
User
.includes(responses: [answer: :question])
.where(questions: {id: X})
.group('users.id')
.order('MAX(responses.created_at) DESC')