帖子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;
答案 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
。