3

帖子 has_many 评论

我正在使用搜索逻辑,它将按命名范围排序。所以,我想要一个按每个帖子的最新评论排序的命名范围。

named_scope :ascend_by_comment, :order => ...comments.created_at??...

我不确定如何做 a:joins并且只获取最新的评论并按其created_at字段排序,所有这些都在 a 中named_scope

我正在使用mysql,仅供参考。

编辑:

这是我要模拟的 SQL 查询:

SELECT tickets.*, comments.created_at AS comment_created_at FROM tickets 
INNER JOIN 
(SELECT comments.ticket_id, MAX(comments.created_at) AS created_at 
  FROM comments group by ticket_id) comments 
ON tickets.id = comments.ticket_id ORDER BY comment_created_at DESC;
4

2 回答 2

1

您可以通过范围加入或包含关联模型来做到这一点,这样的事情就可以了:

named_scope :ascend_by_comment, :joins => :comments, :order => "comments.created_at DESC"

于 2010-01-11T20:37:33.533 回答
1
named_scope :ascend_by_comment,
  :joins => "LEFT JOIN comments ON comments.post_id = posts.id",
  :group => "id",
  :select => "posts.*, max(comments.created_at) AS comment_created_max",
  :order => "comment_created_max ASC"

您可以尝试对其进行优化,但它应该可以工作并为您提供一些如何操作的提示。

编辑

在您编辑问题并表明您想要内部加入(没有没有评论的帖子?)之后,您当然可以更改:joins => "...":joins => :comments.

于 2010-01-11T20:55:55.350 回答