我在这里搜索了很多,但找不到类似的主题:我需要在 Arel 中编写一个查询,因为我使用 will_paginate 来浏览结果,所以我在使用原始 SQL 实现时会感到很舒服。
这是我需要用 Arel 拼写的内容:
SELECT m.*
FROM messages m
JOIN (SELECT tmp.original_id as original_id,
max(tmp.id) as id
FROM messages tmp
WHERE tmp.recipient_id = ?
GROUP BY tmp.original_id) g ON (m.id = g.id)
ORDER BY m.updated_at DESC;
简而言之:子查询检索用户的所有消息。如果一条消息有较新的回复(在回复中,我将引用消息 id 保存为 original_id),旧的将被忽略。对于所有这些消息的结果,我希望 Rails 向我提供相应的对象。
我在 SQL 方面非常熟练,但不幸的是 Arel 不熟练。任何帮助将不胜感激。