Dar*_*isa 0 activerecord ruby-on-rails
我有以下的Rails型号:Chat和Messages其中一个聊天可以有很多的消息。我有以下 Rails 查询,可以为用户作为收件人的每次聊天提取最后一条消息:
def index
messages = Message.where(recipient_id: id)
.select('DISTINCT ON ("chat_id") *')
.order(:chat_id, created_at)
end
Run Code Online (Sandbox Code Playgroud)
这为我提供了用户所在的每个聊天的用户的最后一条消息。我现在想按消息的创建时间对查询的结果进行排序,以便最新的消息显示在顶部。但是,如果我添加
sorted = messages.order(created_at: :desc)
它不会对第一个查询的结果进行排序,它只是将顺序附加到第一个查询(我知道这是预期的行为),因此我没有按创建日期获得排序列表。如何根据第一个查询的结果进行排序?基本上可以用 Rails 语法模仿以下内容:
SELECT *
FROM (SELECT DISTINCT ON (chat_id) *
FROM messages
ORDER BY chat_id, created_at DESC) last_messages
ORDER BY created_at DESC
Run Code Online (Sandbox Code Playgroud)
尝试这个
Message.from(
Message.where(recipient_id: id)
.select('DISTINCT ON ("chat_id") *')
.order("chat_id, created_at DESC"),
:messages
).order(created_at: :desc)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
323 次 |
| 最近记录: |