named_scope按上次评论日期订购帖子

时间:2010-01-11 20:29:24

标签: sql ruby-on-rails named-scope

帖子has_many评论

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

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

我不确定如何执行:joins并仅获取最新评论并按其created_at字段进行排序,所有这些都在named_scope中。

我正在使用mysql,fyi。

修改

这是我试图模仿的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;

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分: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