gpt4 book ai didi

ruby-on-rails - 获取一个类别中所有帖子的最后评论

转载 作者:行者123 更新时间:2023-11-29 12:29:56 24 4
gpt4 key购买 nike

评论属于帖子。
帖子属于类别。

我如何获得每个帖子的所有最后更新评论的集合,所有评论都属于一个类别?

我已经试过了,但它只给了我一个帖子:

category.posts.joins(:comments).order('updated_at DESC').first

更新

我想要的是获取每个帖子的一个评论,每个帖子的最后更新评论。

最佳答案

Rails 在这方面做得不是特别好,尤其是 Postgres,它禁止明显的解决方案(如@Jon 和@Deefour 给出的那样)。

这是我使用过的解决方案,已翻译成您的示例域:

class Comment < ActiveRecord::Base
scope :most_recent, -> { joins(
"INNER JOIN (
SELECT DISTINCT ON (post_id) post_id,id FROM comments ORDER BY post_id,updated_at DESC,id
) most_recent ON (most_recent.id=comments.id)"
)}
...

(DISTINCT ON 是 SQL 标准的 Postgres 扩展,因此它不适用于其他数据库。)

简要说明:DISTINCT ON 删除每个 post_id 的第一行以外的所有行。它通过使用ORDER BY 来决定第一行是哪一行,它必须以post_id 开头,然后按updated at DESC 排序以获得最近的,然后 id 作为决胜局(通常不需要)。

然后你会像这样使用它:

Comment.most_recent.joins(:post).where("posts.category_id" => category.id)

它生成的查询类似于:

SELECT *
FROM comments
INNER JOIN posts ON (posts.id=comments.post_id)
INNER JOIN (
SELECT DISTINCT ON (post_id) post_id,id FROM comments ORDER BY post_id,updated_at DESC,id
) most_recent ON (most_recent.id=comments.id)
WHERE
posts.category_id=#{category.id}

单一查询,相当高效。如果有人能给我一个不那么复杂的解决方案,我会欣喜若狂!

关于ruby-on-rails - 获取一个类别中所有帖子的最后评论,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27050059/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com